0

我有一个由 winform 客户端调用的 WCF 服务方法。客户端将几个字符串传递给该方法,然后该方法执行一系列可能需要超过 20 分钟的操作。在进程大约 15 分钟后,客户端收到 TCP 连接已终止的响应。WCF 服务在此之后继续处理,直到完成作业。我已将客户端绑定配置中的超时设置为每次 30 分钟。我还将编译批处理超时设置为 30 分钟。WCF 服务向客户端返回一个字符串,只是说“成功”,因此这不是关于传输的大小问题。由于某些超时,IIS 似乎正在终止 TCP 连接。

接收对http://xxxxxxxxxxxxxxx.svc的 HTTP 响应时出错。这可能是由于服务端点绑定未使用 HTTP 协议。这也可能是由于服务器中止了 HTTP 请求上下文(可能是由于服务关闭)。有关更多详细信息,请参阅服务器日志。内部异常:底层连接已关闭:接收时发生意外错误。内部异常:无法从传输连接读取数据:现有连接被远程主机强行关闭。内部异常:远程主机强制关闭现有连接

有什么帮助吗?该错误是由 winform 客户端生成的,而不是 wcf 服务 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>
4

1 回答 1

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>

另请参阅http://msdn.microsoft.com/en-us/library/hh924831.aspx

于 2013-04-25T19:46:02.943 回答