我们在服务中有以下netTcpBinding。在一个特定场景中,我们有一个庞大的数据库操作,大约需要35分钟才能完成。我收到“套接字连接中止”异常。为避免异常,我应该更改哪些设置?
注意:我几乎在10分钟后收到异常。默认值为10分钟的配置值是什么?
框架:.Net 3.0
UPDATE :当我应用receiveTimeout =“00:30:00”时,它现在说5分钟后出现以下IE错误“系统无法与外部服务器通信”。
在应用之前,它曾经是我们的aplications'自定义错误页面。知道我现在应该改变什么?
注意:它正在登台服务器中发生。 (这个问题在我们的开发前后都没有提供)
注意:对于暂存,Web应用程序托管在IIS中。 WCF托管在Windows服务
中 <bindings>
<netTcpBinding>
<binding name="AdministrationBinding" maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="32"
maxStringContentLength="2147483647"
maxArrayLength="2147483647"
maxBytesPerRead="2147483647"
maxNameTableCharCount="16384"/>
</binding>
</netTcpBinding>
</bindings>
相应的客户端配置如下:
<binding name="NetTcpBinding_IAdministrationManager"
closeTimeout="00:30:00"
openTimeout="00:30:00"
receiveTimeout="00:30:00" sendTimeout="00:30:00"
transactionFlow="false" transferMode="Buffered"
transactionProtocol="OleTransactions"
hostNameComparisonMode="StrongWildcard"
listenBacklog="10"
maxBufferPoolSize="524288"
maxBufferSize="2147483647"
maxConnections="10"
maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="32"
maxStringContentLength="2147483647"
maxArrayLength="16384" maxBytesPerRead="4096"
maxNameTableCharCount="16384"/>
<reliableSession ordered="true"
inactivityTimeout="00:30:00" enabled="false"/>
<security mode="Transport">
<transport clientCredentialType="Windows"
protectionLevel="EncryptAndSign"/>
<message clientCredentialType="Windows"/>
</security>
</binding>
由于
Lijo
答案 0 :(得分:2)
您还需要在服务器端添加各种超时的非默认值。从技术上讲,并非所有超时对双方都有效/有用(发送与接收,打开与关闭),但为了简单起见,您可以在任何一方镜像它们。
答案 1 :(得分:1)
虽然您可以增加超时以停止此异常,但是如果出现问题,长时间超时会导致客户端等待多年的其他问题,然后再抛出错误。
我认为让长操作在服务器上异步发生并让方法立即返回可能会更好。如果您需要在操作完成的客户端进行通知,则可以使用回调。
答案 2 :(得分:0)
服务中的receiveTimeout默认为10分钟 - 这是服务在决定代理消失之前等待请求的时间。你需要增加这个。但是,你是否进行了35分钟的同步通话?
对于这种情况,我会以异步方式运行所有内容,并让客户端定期检查完成情况或使用双工消息传递,以便服务在操作完成时通知客户端
发生了什么,客户端需要比receiveTimeout更频繁地与服务通信,否则服务将终止连接 - 事实上,如果您使用双工,则服务需要更频繁地与客户端通信客户端的receiveTimeout出于同样的原因