2013-04-25 66 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

相關問題