Iis 7 Windows Server 2008上的SignalR serverSentEvents和IIS 7 POST请求花费太多时间完成
我正在使用它,它在生产环境中表现得很奇怪,在生产环境中,Iis 7 Windows Server 2008上的SignalR serverSentEvents和IIS 7 POST请求花费太多时间完成,iis-7,signalr,signalr-hub,server-sent-events,postdelayed,Iis 7,Signalr,Signalr Hub,Server Sent Events,Postdelayed,我正在使用它,它在生产环境中表现得很奇怪,在生产环境中,ASP.NET MVC 5[.NET Framework 4.5]应用程序安装在Windows Server 2008和IIS 7上。AppPool处于集成模式,并且只有此应用 信号机发出的获取请求只需60毫秒: http://mysite.org.br/signalr/negotiate?clientProtocol=1.3&_=1374377239338 http://mysite.org.br/signalr/send?tr
ASP.NET MVC 5
[.NET Framework 4.5]应用程序安装在Windows Server 2008
和IIS 7
上。AppPool处于集成模式,并且只有此应用
信号机发出的获取
请求只需60毫秒:
http://mysite.org.br/signalr/negotiate?clientProtocol=1.3&_=1374377239338
http://mysite.org.br/signalr/send?transport=serverSentEvents&connectionToken=Lp%2BGdI6jVTLPrQ3ZGJ065F9GrMbKYWNmgrtKPZz%2BCUYAsxrqP7hyAMPr%2Bg1E3IRY%2F0brzXVanumPy7NPCFOlcXTRrJssFD2EEoxd6fWhAVEUSfIj
问题发生在POST
请求中,该请求需要花费很长时间。在最近的测试中,它花费了难以置信的3m 1s:
http://mysite.org.br/signalr/negotiate?clientProtocol=1.3&_=1374377239338
http://mysite.org.br/signalr/send?transport=serverSentEvents&connectionToken=Lp%2BGdI6jVTLPrQ3ZGJ065F9GrMbKYWNmgrtKPZz%2BCUYAsxrqP7hyAMPr%2Bg1E3IRY%2F0brzXVanumPy7NPCFOlcXTRrJssFD2EEoxd6fWhAVEUSfIj
当这种间歇性故障发生时,完成请求通常需要40秒以上
用Firefox22和Firebug测试它。。。如果禁用浏览器缓存,它将平稳运行,也就是说,它不会延迟POST
请求。否则,当我启用浏览器缓存时,它会再次延迟POST
请求
使用googlechrome28
POST在那里以挂起状态显示
如果我循环使用AppPool
,则POST
请求只需203 ms。
我对这个特定的AppPool
所做的唯一修改是设置了空闲超时(分钟)=0
,也就是说,我希望避免循环使用AppPool
查看Process Explorer,我看到它的177.300 KB(专用字节)
和211.900(工作集)
和CPU
现在是0
以下是从Firebug控制台获取的Signal
日志信息:
[00:27:20 GMT-0300] SignalR: Negotiating with '/signalr/negotiate?clientProtocol=1.3'.
Signal...FCU9MU1 (line 1)
GET http://mysiste.org.br/signalr/negotiate?clientProtocol=1.3&_=1374377239338 200 OK 62ms
js?v=K...xUBM641 (line 1)
[00:27:20 GMT-0300] SignalR: Attempting to connect to SSE endpoint 'http://mysiste.org.br/signalr/connect?transport=serverSentEvents&connectionToken=Lp%2BGdI6jVTLPrQ3ZGJ065F9GrMbKYWNmgrtKPZz%2BCUYAsxrqP7hyAMPr%2Bg1E3IRY%2F0brzXVanumPy7NPCFOlcXTRrJssFD2EEoxd6fWhAVEUSfIj&connectionData=%5B%7B%22name%22%3A%22assessmenthub%22%7D%5D&tid=5'
Signal...FCU9MU1 (line 1)
[00:27:20 GMT-0300] SignalR: EventSource connected
Signal...FCU9MU1 (line 1)
[00:27:20 GMT-0300] SignalR: Now monitoring keep alive with a warning timeout of 13333.333333333332 and a connection lost timeout of 20000
Signal...FCU9MU1 (line 1)
POST http://mysiste.org.br/signalr/send?transport=s...F0brzXVanumPy7NPCFOlcXTRrJssFD2EEoxd6fWhAVEUSfIj 200 OK 3m 1s
js?v=K...xUBM641 (line 1)
[00:39:12 GMT-0300] SignalR: EventSource readyState: 0
Signal...FCU9MU1 (line 1)
[00:39:12 GMT-0300] SignalR: EventSource reconnecting due to the server connection ending
Signal...FCU9MU1 (line 1)
[00:39:14 GMT-0300] SignalR: EventSource calling close()
Signal...FCU9MU1 (line 1)
[00:39:14 GMT-0300] SignalR: serverSentEvents reconnecting
Signal...FCU9MU1 (line 1)
[00:39:14 GMT-0300] SignalR: Attempting to connect to SSE endpoint 'http://mysiste.org.br/signalr/reconnect?transport=serverSentEvents&connectionToken=Lp%2BGdI6jVTLPrQ3ZGJ065F9GrMbKYWNmgrtKPZz%2BCUYAsxrqP7hyAMPr%2Bg1E3IRY%2F0brzXVanumPy7NPCFOlcXTRrJssFD2EEoxd6fWhAVEUSfIj&connectionData=%5B%7B%22name%22%3A%22assessmenthub%22%7D%5D&messageId=d-k%2C0%7Cx%2C0%7Cy%2C1%7Cz%2C0&tid=5'
Signal...FCU9MU1 (line 1)
[00:39:44 GMT-0300] SignalR: Couldn't reconnect within the configured timeout (30000ms), disconnecting.
Signal...FCU9MU1 (line 1)
[00:39:44 GMT-0300] SignalR: SignalR: Stopping connection.
MyWeb.config
具有以下设置:
<system.web>
.
.
.
<sessionState mode="InProc" customProvider="DefaultSessionProvider">
<providers>
<add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" />
</providers>
</sessionState>
</system.web>
<system.webServer>
<urlCompression doDynamicCompression="true" doStaticCompression="true" dynamicCompressionBeforeCache="false" />
<validation validateIntegratedModeConfiguration="false" />
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00" />
</staticContent>
<modules runAllManagedModulesForAllRequests="true">
<add name="PerRequestLifestyle" type="Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule, Castle.Windsor" />
</modules>
<handlers>
<add name="AttributeRouting" path="routes.axd" verb="*" type="AttributeRouting.Web.Logging.LogRoutesHandler, AttributeRouting.Web" />
</handlers>
<security>
<requestFiltering>
<requestLimits maxQueryString="10240"></requestLimits>
</requestFiltering>
</security>
</system.webServer>
.
.
.
提到AVG antivirus是问题所在,但我的客户端服务器上没有安装AVG antivirus。不过它有McAfee
是什么导致了这种行为?如果您需要任何更多的信息来帮助进一步调试,请直接询问,我会尽力提供
注意:在此期间,我恢复到SignalR stable release 1.1.2,到目前为止一切正常。只是为了向将来可能发现此问题的所有人说明这一点:
该问题与ASP.NET中使用的有关。如前所述:
使用带有信号器的会话根本不起作用。它会提出所有要求
获取会话锁,这可能就是您看到这些的原因
问题
因此,解决方案是:从Web.config
文件中删除
配置以及Global.asax
中可能存在的任何会话事件
<sessionState mode="InProc" customProvider="DefaultSessionProvider">
<providers>
<add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" />
</providers>
</sessionState>
要真正解决此问题。您是否使用会话?@dfowler:使用sessionState
信息检查更新的Web.config
设置,如果这就是您所说的session
。将会话与SignalR一起使用根本不起作用。它将使所有请求都获得会话锁,这可能就是您看到这些问题的原因。是的,删除会话并从Global.asax中删除会话事件,它应该可以工作。更新到SignalR 2.0.0