SignalR serverSentEvents на Windows Server 2008 с запросом POST IIS 7, который занимает слишком много времени для выполнения

я используюSignalR 2.0.0-beta2 и он ведет себя странно в производственной среде, гдеASP.NET MVC 5 Приложение [.NET Framework 4.5] установлено наWindows Server 2008 с участиемIIS 7, AppPool находится в интегрированном режиме и имеет только это приложение.

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 секунд завершить запрос.

Тестирование сFirefox 22 и Firebug ... если я отключукеш браузераработает без сбоев, то естьPOST запрос. В противном случае, когда я включаю кеш браузера, он снова задерживаетPOST запрос.

С помощьюGoogle Chrome 28 ПОСТ сидит там св ожидании статус.

Если я переработаю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, и пока все работает нормально.

Ответы на вопрос(1)

Ваш ответ на вопрос