在 IIS Express 上调试 ASP.NET 时出现重复请求
Duplicated requests when debugging ASP.NET on IIS Express
我在调试 ASP.NET Web 应用程序 (.NET 4.6.1) 时注意到一个奇怪的行为。每当发生 HTTP 错误(例如 404 或 403)时,请求将被重复最多 3 次。
我已经使用 fiddler 测试了这个单一问题,Intellitrace 有效地向我显示了三个相同的请求(即使我只发送一个请求)。
我可以看到这个问题的影响,因为管道中的任何 Owin 中间件都被调用了三次。像这样的简单中间件:
app.Use(async (c, n) =>
{
Debug.WriteLine("HIT!");
await n.Invoke();
});
将连续打印三个 "HIT!" 到控制台。
只有当请求产生错误时才会发生这种情况,如果请求由中间件处理则不会发生(例如,如果中间件以 2XX 状态代码响应则不会)。
怎么回事?
我是 运行 Win10 上的 VS2015 和 IIS Express 10。
[编辑] 可能与我的 Web.config 配置有关?我正在添加其中的摘录。
<system.web>
<compilation debug="true" targetFramework="4.6.1" />
<httpRuntime targetFramework="4.6.1" enableVersionHeader="false" />
</system.web>
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
</customHeaders>
<redirectHeaders>
<clear />
</redirectHeaders>
</httpProtocol>
<security>
<requestFiltering removeServerHeader="true" />
</security>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
该问题是由多个处理程序试图管理 IIS Express 中未处理的请求引起的。我通过在 Web.config:
中删除它们来解决它
<system.webServer>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrl-Integrated-4.0" />
<remove name="ExtensionlessUrl-ISAPI-4.0_32bit" />
</handlers>
</system.webServer>
我在调试 ASP.NET Web 应用程序 (.NET 4.6.1) 时注意到一个奇怪的行为。每当发生 HTTP 错误(例如 404 或 403)时,请求将被重复最多 3 次。
我已经使用 fiddler 测试了这个单一问题,Intellitrace 有效地向我显示了三个相同的请求(即使我只发送一个请求)。
我可以看到这个问题的影响,因为管道中的任何 Owin 中间件都被调用了三次。像这样的简单中间件:
app.Use(async (c, n) =>
{
Debug.WriteLine("HIT!");
await n.Invoke();
});
将连续打印三个 "HIT!" 到控制台。
只有当请求产生错误时才会发生这种情况,如果请求由中间件处理则不会发生(例如,如果中间件以 2XX 状态代码响应则不会)。
怎么回事?
我是 运行 Win10 上的 VS2015 和 IIS Express 10。
[编辑] 可能与我的 Web.config 配置有关?我正在添加其中的摘录。
<system.web>
<compilation debug="true" targetFramework="4.6.1" />
<httpRuntime targetFramework="4.6.1" enableVersionHeader="false" />
</system.web>
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
</customHeaders>
<redirectHeaders>
<clear />
</redirectHeaders>
</httpProtocol>
<security>
<requestFiltering removeServerHeader="true" />
</security>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
该问题是由多个处理程序试图管理 IIS Express 中未处理的请求引起的。我通过在 Web.config:
中删除它们来解决它<system.webServer>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrl-Integrated-4.0" />
<remove name="ExtensionlessUrl-ISAPI-4.0_32bit" />
</handlers>
</system.webServer>