Timeout WCF超时问题?
我有一个较长的基于WCF的流程。如果有任何帮助,WCF服务将在Azure中运行。我认为这个问题与超时有关: 1) Winforms客户端在绑定部分具有以下.config设置:Timeout WCF超时问题?,timeout,azure,wcf,wcf-client,Timeout,Azure,Wcf,Wcf Client,我有一个较长的基于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" bypassProxyOnLo
<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>
System.Net.Sockets.SocketException
远程主机已强制关闭现有连接
位于System.Net.Sockets.NetworkStream.Read(字节[]缓冲区,Int32偏移量,Int32大小)
4) 但是,WCF调用本身已成功完成(我已在服务器端记录了启动/结束)。如何避免例外情况
谢谢大家! Windows Azure负载平衡器在60秒后终止空闲连接。查看Azure团队的最新帖子 最新答案: Azure负载平衡器在4分钟后终止空闲连接。如果您对增加/减少超时值感兴趣,请查看本文:
只要运行超过一分钟,它就会返回该错误。错误会在一分钟后准确地返回给客户端。服务器仍在完成方法调用。史蒂夫,哇,完全不知道这一点。。。是否有延长超时时间的方法?有些电话可能需要1分钟以上才能完成!有趣。Steve是否有任何方法可以修改此行为,或者是否打算通过队列或其他跨任务方法将长期运行的作业分包给工作人员角色?目前没有任何方法可以改变这一点。但是,如果您可以通过TCP连接定期发送数据,它将保持打开状态。(只有空闲连接才会被终止。)是否有计划在将来对此进行配置?如果有一个计划,有什么想法什么时候可以得到,比如下一个版本…或者最好不要等到明年晚些时候…或者根本不在路线图上…只是一些指示会有所帮助:-)史蒂夫,如果这方面发生了变化,请提些建议。或者可能会为功能创建某种请求来控制/增加超时?通常,通过调用一些伪方法来保持连接的活动性不是问题,但在某些情况下,这是不可能的——比如说,我有第三方服务,允许我发送一个HTTP POST请求和处理结果(它支持一些脚本语言,不允许在发生连接终止时处理连接终止),所以现在整个过程都失败了。希望你能看到这条消息。