3

私が使用していて、 [.NET Framework 4.5] アプリがインストールされてSignalR 2.0.0-beta2いる本番環境で動作がおかしいです。AppPool は統合モードであり、このアプリのみがあります。ASP.NET MVC 5Windows Server 2008IIS 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を無効にすると、スムーズに実行されます。つまり、リクエストに遅延はありません。そうしないと、ブラウザのキャッシュを有効にすると、リクエストが再び遅延します。POSTPOST

Google Chrome 28POSTを使用すると、保留中のステータスが表示されます。

をリサイクルするAppPoolと、POSTリクエストにかかる時間はわずか203 ミリ秒です。この特定に対して行った唯一の変更は、AppPool設定Idle Time-out (minutes) = 0したこと、つまり、AppPool のリサイクルを避けたいことです。

Process Explorer を見ると、それw3wp.exe177.300 KB (Private Bytes)あり211.900 (Working Set)、現在もそうであることがCPUわかり0ます。

SignalRFirebug コンソールから取得したログ情報は次のとおりです。

[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 に戻しましたが、これまでのところすべて正常に動作しています。

4

1 に答える 1

4

将来この問題を見つける可能性のあるすべての人にこれを明確にするために:

この問題はSessionState、ASP.NET での使用に関連しています。@dfowlerが言ったように:

SignalR でセッションを使用してもまったく機能しません。すべてのリクエストがセッション ロックを取得するようになるため、これらの問題が発生している可能性があります。

したがって、解決策は次のとおりです。ファイル<sessionState>から構成を削除し、 .Web.configGlobal.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>

それを取り除いた後、私の場合、問題は解決しました。


問題を実際に修正するには、SignalR 2.0.0に更新する必要がありました。

于 2013-08-01T02:21:10.247 に答える