2013-04-25 153 views
0

我有一个WCF服务方法被winform客户端调用。客户端向该方法传递几个字符串,然后该方法执行一系列可能需要超过20分钟的操作。 在进程进行大约15分钟后,客户端会收到TCP连接已终止的响应。 WCF服务继续处理超过这一点,直到它完成工作。 我已将客户端的绑定配置中的超时设置为30分钟。我也将编译批量超时设置为30分钟。 WCF服务返回一个字符串给客户,只是说“成功”,所以它不是关于传输的大小问题。几乎看起来好像IIS由于某种超时而终止了TCP连接。如何防止从WCF服务对winform客户端的超时响应

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

任何帮助?错误是由winform客户端生成的,而不是wcf服务的顺便说一句。

这里是绑定设置:

<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> 
+1

没有你也更新了服务器配置? – evgenyl 2013-04-25 18:06:52

+0

是的,我在web配置中添加了httpRuntime maxRequestLength =“30000000”executionTimeout =“1800”。 – eBot 2013-04-25 18:27:48

+0

我也发现当服务完成其操作并返回消息时,调用wcf服务的客户端应用程序会引发错误。 – eBot 2013-04-25 18:28:30

回答

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

+0

是的,正如我在我的原始文章中提到的我设置所有可用的客户端配置中的超时绑定 – eBot 2013-04-25 20:08:22

+0

我现在已经尝试都没有成功,解决问题我已经使长时间运行的服务调用没有返回值,从而杀死TCP连接。 – eBot 2013-05-07 13:57:24