私が使用していて、 [.NET Framework 4.5] アプリがインストールされてSignalR 2.0.0-beta2
いる本番環境で動作がおかしいです。AppPool は統合モードであり、このアプリのみがあります。ASP.NET MVC 5
Windows Server 2008
IIS 7
によるGET
リクエストSignalR
はわずか60 ミリ秒で完了します。
http://mysite.org.br/signalr/negotiate?clientProtocol=1.3&_=1374377239338
問題は、POST
永遠にかかるリクエストで発生します。最新のテストでは、信じられないほどの 3 分 1 秒かかりました。
http://mysite.org.br/signalr/send?transport=serverSentEvents&connectionToken=Lp%2BGdI6jVTLPrQ3ZGJ065F9GrMbKYWNmgrtKPZz%2BCUYAsxrqP7hyAMPr%2Bg1E3IRY%2F0brzXVanumPy7NPCFOlcXTRrJssFD2EEoxd6fWhAVEUSfIj
この断続的な問題が発生すると、通常、リクエストを完了するのに40 秒以上かかります。
と Firebugでテストしています...ブラウザのキャッシュFirefox 22
を無効にすると、スムーズに実行されます。つまり、リクエストに遅延はありません。そうしないと、ブラウザのキャッシュを有効にすると、リクエストが再び遅延します。POST
POST
Google Chrome 28
POSTを使用すると、保留中のステータスが表示されます。
をリサイクルするAppPool
と、POST
リクエストにかかる時間はわずか203 ミリ秒です。この特定に対して行った唯一の変更は、AppPool
設定Idle Time-out (minutes) = 0
したこと、つまり、AppPool のリサイクルを避けたいことです。
Process Explorer を見ると、それw3wp.exe
が177.300 KB (Private Bytes)
あり211.900 (Working Set)
、現在もそうであることがCPU
わかり0
ます。
SignalR
Firebug コンソールから取得したログ情報は次のとおりです。
[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.
私Web.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>
症状から、応答が何らかの形でバッファリングされているように見えます。このSignalRの問題は、AVG アンチウイルスが問題であると述べていますが、クライアントのサーバーに AVG アンチウイルスがインストールされていません。それは持ってMcAfee
います。
この動作の原因は何ですか? これをさらにデバッグするためにさらに情報が必要な場合は、お問い合わせください。提供できるよう最善を尽くします。
注: その間、SignalR 安定リリース 1.1.2 に戻しましたが、これまでのところすべて正常に動作しています。