【问题标题】:ExtensionlessUrlHandler and "Recursion too deep; the stack overflowed"ExtensionlessUrlHandler 和“递归太深;堆栈溢出”
【发布时间】:2016-05-12 21:33:54
【问题描述】:

我正在尝试让其他开发人员的应用在我的机器上运行。解决方案是使用 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>

其他可能相关的事实:

  • 这台机器之前没有做过虚拟主机,但是我做了很多VS2013的开发,上周才装了2015来运行这个项目。
  • 该项目确实包含一些 C# 6.0 功能,即新的字符串插值功能。

我什至如何开始调试呢?我在 Google 上的相关点击率为零。

【问题讨论】:

  • 我也遇到过这个问题。您找到解决方案了吗?
  • 我目前仅在一条特定路线上遇到这种情况。其他路线运行良好。
  • 我也看到了这个。任何 cmets 将不胜感激。
  • 你们解决了吗?我现在面临同样的问题。
  • 强制性“我也是”。没有什么可继续的。我一定尝试过更改 IIS 中的每个设置,但仍然无法正常工作。

标签: asp.net-web-api url-routing stack-overflow iis-express


【解决方案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="" 并且那时抛出了“递归太深......”错误。

【讨论】:

  • 我正在寻找一个类似的(甚至相同的?)problem。不幸的是,您的解决方案仅解决了此处描述的问题,而 creating another one
【解决方案2】:

在将我的项目迁移到 VS2017(在 VS2010 中工作)时,我遇到了完全相同的问题,并按照另一篇帖子的建议设法解决了这个问题:

https://stackoverflow.com/a/29370225

所以问题在于 IISExpress 使用与 IIS 不同的处理程序名称(没有“处理程序”后缀),因此您需要将以下删除脚本添加到 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" />

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    • 2015-04-04
    • 2016-11-09
    • 2019-12-01
    • 1970-01-01
    • 2017-01-20
    • 2018-12-02
    相关资源
    最近更新 更多