Время ожидания WCF? - PullRequest
       19

Время ожидания WCF?

5 голосов
/ 01 февраля 2011

У меня довольно длительный процесс на основе WCF. Служба WCF работает в Azure, если это поможет. Я считаю, что проблема связана с таймаутами:

1) Клиент Winforms имеет следующий параметр .config в разделе привязки:

 <wsHttpBinding>
  <binding name="XXX" closeTimeout="00:05:00" openTimeout="00:05:00"
   receiveTimeout="00:10:00" sendTimeout="00:10:00" bypassProxyOnLocal="false"
   transactionFlow="false" hostNameComparisonMode="StrongWildcard"
   maxBufferPoolSize="10000000" maxReceivedMessageSize="10000000"
   messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
   allowCookies="false">
   <readerQuotas maxDepth="255" maxStringContentLength="8192" maxArrayLength="16384"
    maxBytesPerRead="4096" maxNameTableCharCount="16384" />
   <reliableSession ordered="true" inactivityTimeout="00:10:00"
    enabled="false" />
   <security mode="TransportWithMessageCredential">
    <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
    <message clientCredentialType="UserName" negotiateServiceCredential="true" algorithmSuite="Default" establishSecurityContext="false"/>
   </security>
  </binding>
 </wsHttpBinding>

2) Служба WCF имеет следующий раздел связывания в файле web.config

   <wsHttpBinding>
    <binding name="XXX" maxReceivedMessageSize="10000000" sendTimeout="00:10:00" receiveTimeout="00:10:00" closeTimeout="00:10:00" openTimeout="00:10:00">
     <security mode="TransportWithMessageCredential">
      <message clientCredentialType="UserName" establishSecurityContext="false" />
     </security>
     <readerQuotas maxArrayLength="2000000" maxBytesPerRead="10000000" maxStringContentLength="10000000" maxDepth="255" />
    </binding>

   </wsHttpBinding>

3) У меня есть один длительный метод в WCF (обычно 2 минуты). Клиенты вызывают метод, а те, которые выполняются дольше 1 минуты, исключаются. Это самое внутреннее исключение:

  <InnerException>
    <Type>System.Net.Sockets.SocketException</Type>
    <Message>An existing connection was forcibly closed by the remote host</Message>
    <StackTrace>
      <Frame>at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)</Frame>
    </StackTrace>
  </InnerException>
</InnerException>

4) Однако сам вызов WCF завершился успешно (у меня оба Start / End зарегистрированы на стороне сервера). Как мне избежать исключения?

Спасибо!

Ответы [ 3 ]

8 голосов
/ 01 февраля 2011

Балансировщик нагрузки Windows Azure прекращает бездействующие соединения через 60 секунд.

2 голосов
/ 15 октября 2014

Ознакомьтесь с последним сообщением от команды Azure ... http://azure.microsoft.com/blog/2014/08/14/new-configurable-idle-timeout-for-azure-load-balancer/

0 голосов
/ 07 июня 2017

Обновленный ответ:

Балансировщик нагрузки Azure прекращает бездействующие соединения через 4 минуты. Если вы заинтересованы в увеличении / уменьшении значения тайм-аута, проверьте эту статью:

https://azure.microsoft.com/en-us/blog/new-configurable-idle-timeout-for-azure-load-balancer/

...