我有一个winform客户端调用的WCF服务方法。客户端将几个字符串传递给该方法,然后该方法执行一系列操作,这可能需要超过20分钟。 在进程大约15分钟后,客户端收到TCP连接已终止的响应。 WCF服务继续处理超过此点,直到完成作业。 我已将客户端绑定配置中的超时设置为每个30分钟。我还将编译批处理超时设置为30分钟。 WCF服务向客户端返回一个字符串,只是说“成功”,因此它不是关于传输的大小问题。由于某些超时,似乎IIS正在终止TCP连接。
接收到http://xxxxxxxxxxxxx.svc的HTTP响应时发生错误。这可能是由于服务端点绑定不使用HTTP协议。这也可能是由于服务器中止HTTP请求上下文(可能是由于服务关闭)。请参阅服务器日志以获取更多详内部异常:基础连接已关闭:接收时发生意外错误。内部异常:无法从传输连接读取数据:远程主机强制关闭现有连接。内部异常:远程主机强制关闭现有连接
有任何帮助吗?该错误由winform客户端生成,而不是wcf service btw。
以下是绑定设置:
<wsHttpBinding>
<binding name="WSHttpBinding_STUFFGOESHERE" closeTimeout="00:30:00"
openTimeout="00:30:00" receiveTimeout="00:30:00" sendTimeout="00:30:00"
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288000" maxReceivedMessageSize="65536" messageEncoding="Text"
textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:30:00"
enabled="false" />
<security mode="Message">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Windows" negotiateServiceCredential="true"
algorithmSuite="Default" />
</security>
</binding>
</wsHttpBinding>
答案 0 :(得分:0)
您是否在httpbinding上设置了超时? 在代码中:
((WSHttpBinding)binding).OpenTimeout = new TimeSpan(0, 1, 0);
((WSHttpBinding)binding).CloseTimeout = new TimeSpan(0, 1, 0);
((WSHttpBinding)binding).SendTimeout = new TimeSpan(0, 30, 0);
((WSHttpBinding)binding).ReceiveTimeout = new TimeSpan(0, 30, 0);
或在服务配置文件
中<bindings>
<wsHttpBinding>
<binding openTimeout="00:1:00"
closeTimeout="00:1:00"
sendTimeout="00:30:00"
receiveTimeout="00:30:00">
</binding>
</wsHttpBinding>
</bindings>