ExtensionlessUrlHandler和“递归太深; 栈溢出”

13

我正在尝试在我的电脑上运行另一个开发者的应用程序。该解决方案是在使用Web API的VS 2015中构建的,我正在使用64位IIS Express运行它。每个请求都返回500.0错误。请求跟踪日志对此的说明如下:

1517.  -MODULE_SET_RESPONSE_ERROR_STATUS 
ModuleName    ManagedPipelineHandler 
Notification  EXECUTE_REQUEST_HANDLER 
HttpStatus    500 
HttpReason    Internal Server Error 
HttpSubStatus 0 
ErrorCode     Recursion too deep; the stack overflowed. (0x800703e9) 
ConfigExceptionInfo

相关的配置部分看起来像这样:

<system.webServer>
<handlers>
  <remove name="OPTIONS" />
  <remove name="OPTIONSVerbHandler" />
  <remove name="TRACEVerbHandler" />
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*" verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>

其他可能相关的事实:

  • 该机器以前没有用于 Web 托管,但我一直在进行大量 VS2013 开发,并且上周才安装了 2015 版本来运行这个项目。
  • 该项目包含一些 C# 6.0 功能,即新的字符串插值功能。

我应该如何开始调试?我在 Google 上没有找到任何相关的信息。


我也遇到了这个问题。你已经找到解决方案了吗? - Hoàng Long
我目前只在一个特定的路由上遇到了这个问题,其他路由都正常工作。 - Jeff Yates
我也看到了这个。欢迎留下任何评论。 - Tom
你们解决了吗?我现在也遇到了同样的问题。 - Pawel
必须得说“我也是”。目前还没有任何线索。我已经尝试了更改IIS中的每个设置,但仍然无法使其正常工作。 - Steve Smith
非常抱歉我没有回答你的问题。现在我在一份新工作中,我的记忆完全被清空了。 - roufamatic
2个回答

1
将您列出的每个处理程序中的 path="*" 更改为 path="*."。
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

我相信有一种使用 path="" 的方法,但我还没有弄清楚是什么。我遇到这个问题只是因为我试图使用 path="",然后才抛出了"递归太深..."的错误。


我正在研究一个类似的(甚至可能是相同的?)问题。不幸的是,你的解决方案只解决了这里描述的问题,同时又产生了另一个问题。 - O. R. Mapper

0

当我将我的项目从VS2010迁移到VS2017时,遇到了完全相同的问题,但是我通过遵循另一篇帖子的建议解决了这个问题:

https://dev59.com/-l8d5IYBdhLWcg3w8F6-#29370225

问题在于IISExpress使用了与IIS不同的处理程序名称(没有“Handler”后缀),因此您需要在web.config中添加以下删除脚本:
<!--Handler in IIS-->
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit"/>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit"/>
<remove name="ExtensionlessUrlHandler-Integrated-4.0"/>
<!--Handler in IISExpress-->
<remove name="ExtensionlessUrl-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrl-Integrated-4.0" />

希望这能有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接