对 IIS(MVC4 应用程序)的请求在到达控制器之前在管道内(在 ExtensionlessUrlHandler-Integrated-4.0 中)等待 10 秒

问题描述 投票:0回答:1

环境:IIS 7.5。 .NET 4.5.1。 WINDOWS 2008 R2 SP1 集成模式

我有一个在上述环境中工作的 MVC 应用程序。处理我的一些请求大约需要 15 秒。它与控制器的动作活动或视图渲染无关。对于使用一个常量字符串返回视图的操作或 JSON 结果操作,也会发生这种情况。 在控制器操作的日志中,我可以看到请求开始执行的时间比我在浏览器端的 fiddler 中看到的晚大约 10 秒。 我使用“失败请求跟踪”分析了该请求,结果发现该请求被困在 IIS 内部的某个位置。这是这次唯一的请求,有大量的空闲内存和处理器时间。 事实证明,消耗约 10 秒的事件始终是使用 ExtensionlessUrlHandler-Integrated-4.0 的事件。然后大约 10 秒后出现下一个事件。

这些failerd请求的共同点是它们作为AJAX请求发出,但在处理它们时没有其他打开的请求,因此并发不是问题。

造成此类延误的原因可能是什么?

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="WWW Server" Guid="{3A2A4E84-4C21-4981-AE10-3FDA0D9B0F83}"/>
<EventID>0</EventID>
<Version>1</Version>
<Level>4</Level>
<Opcode>43</Opcode>
<Keywords>0x0</Keywords>
<TimeCreated SystemTime="2014-03-28T15:44:19.663Z"/>
<Correlation ActivityID="{00000000-0000-0000-0703-0080000000FC}"/>
<Execution ProcessID="9308" ThreadID="3504"/>
<Computer>COMP1</Computer>
</System>
<EventData>
<Data Name="ContextId">{00000000-0000-0000-0703-0080000000FC}</Data>
<Data Name="OldHandlerName"></Data>
<Data Name="NewHandlerName">ExtensionlessUrlHandler-Integrated-4.0</Data>
<Data Name="NewHandlerModules">ManagedPipelineHandler</Data>
<Data Name="NewHandlerScriptProcessor"></Data>
<Data Name="NewHandlerType">System.Web.Handlers.TransferRequestHandler</Data>
</EventData>
<RenderingInfo Culture="en-US">
<Opcode>HANDLER_CHANGED</Opcode>
</RenderingInfo>
<ExtendedTracingInfo xmlns="http://schemas.microsoft.com/win/2004/08/events/trace">
<EventGuid>{D42CF7EF-DE92-473E-8B6C-621EA663113A}</EventGuid>
</ExtendedTracingInfo>
</Event>
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="WWW Server" Guid="{3A2A4E84-4C21-4981-AE10-3FDA0D9B0F83}"/>
<EventID>0</EventID>
<Version>1</Version>
<Level>5</Level>
<Opcode>1</Opcode>
<Keywords>0x100</Keywords>
<TimeCreated SystemTime="2014-03-28T15:44:28.977Z"/>
<Correlation ActivityID="{00000000-0000-0000-0703-0080000000FC}"/>
<Execution ProcessID="9308" ThreadID="3504"/>
<Computer>COMP1</Computer>
</System>
<EventData>
<Data Name="ContextId">{00000000-0000-0000-0703-0080000000FC}</Data>
<Data Name="ModuleName">HttpCacheModule</Data>
<Data Name="Notification">1</Data>
<Data Name="fIsPostNotification">false</Data>
</EventData>
<RenderingInfo Culture="en-US">
<Opcode>NOTIFY_MODULE_START</Opcode>
<Keywords>
<Keyword>RequestNotifications</Keyword>
</Keywords>
<freb:Description Data="Notification">BEGIN_REQUEST</freb:Description>
</RenderingInfo>
<ExtendedTracingInfo xmlns="http://schemas.microsoft.com/win/2004/08/events/trace">
<EventGuid>{002E91E3-E7AE-44AB-8E07-99230FFA6ADE}</EventGuid>
</ExtendedTracingInfo>
</Event>
asp.net-mvc-4 iis iis-7.5
1个回答
0
投票

我们在使用 ASP.NET API 的 Angular SPA 中遇到了类似的问题。在当天的第一次 API 调用中,返回结果需要超过 20 秒的时间。我们已经完成了所有建议的解决方案,包括关闭 IIS 空闲超时、预编译 .NET 应用程序、在同一网站上设置应用程序 SPA 和 API,以避免预检请求的开销,但这些都没有帮助。我们还发现,在随机时间,API 调用需要 20 秒以上才能返回。我们创建了一个计划任务来执行 API 调用以保持 API 处于活动状态,但我们仍然遇到间歇性延迟。我们打开失败请求跟踪,发现大部分延迟发生在 HANDLER_CHANGED 事件中。 Failed Request Trace showing delay 经过几天的搜索解决方案并尝试建议后,我们发现了此页面和解决方案。我们还有一些后台进程在 bin 文件夹中写入日志文件,这导致 IIS 重新编译并重新加载应用程序,从而导致延迟。感谢 Piotr 提供的信息。

© www.soinside.com 2019 - 2024. All rights reserved.