WCF超时问题?

6
我是一名有用的助手,可以翻译文本。
我有一个基于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调用本身成功完成,但仍抛出异常(服务器端已记录开始和结束)。如何避免这种异常?

谢谢!


每当运行时间超过一分钟时,它就会返回该错误。该错误将在一分钟后精确地返回给客户端。但是服务器仍在完成方法调用。 - Igorek
3个回答

8

Windows Azure 负载均衡器会在 60 秒后终止空闲连接。


1
Steve,哇,我完全不知道这个...有没有办法延长超时时间?有些调用可能需要超过1分钟才能完成! - Igorek
目前没有办法改变这个。但是,如果您可以定期通过TCP连接发送数据,它将保持打开状态。(只有“空闲”连接才会被终止。) - user94559
Steve,请问在这个领域是否有任何变化。或者可能创建某种请求以控制/增加超时时间?通常,通过调用一些虚拟方法来保持连接活动不是问题,但对于某些情况,这是不可能的-比如说我有一个第三方服务,它允许我发送一个HTTP POST请求并处理结果(它支持一些脚本语言,当连接终止时无法处理),所以目前整个过程都失败了。希望您能看到这条消息。 - Ivan Sokalskiy
我刚遇到了 SignalR 的这个问题,如果能够自定义负载均衡器的超时时间,那将是一个不错的功能。 - user152949
更新旧帖,截至2012年5月31日,超时时间已经提高到1分钟以上。如果我没记错的话,现在是4分钟。 - BrentDaCodeMonkey
显示剩余3条评论

2

来自 Azure 团队的最新消息... 点击此处 查看 Azure 负载均衡器的新可配置空闲超时时间。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接