2009-11-27 171 views
1

我正在調用WCF服務,但在客戶端收到服務響應時收到CommunicationException由於底層連接關閉,WCF呼叫失敗

System.ServiceModel.CommunicationException:接收到對http://localhost:8080/Service的HTTP響應時發生錯誤。這可能是由於服務端點綁定不使用HTTP協議。這也可能是由於HTTP請求上下文被服務器中止(可能是由於服務關閉)。查看服務器日誌獲取更多詳細信---> System.Net.WebException:底層連接已關閉:接收時發生意外錯誤。 ---> System.IO.IOException:無法從傳輸連接讀取數據:現有連接被遠程主機強制關閉。 ---> System.Net.Sockets.SocketException:一個現有的連接被強制由遠程主機

  • ,使得該呼叫是一個WCF代理客戶端,客戶端關閉。
  • 該服務方法在沒有 的情況下執行任何異常。
  • WCF調用在其中 花費很長時間才能完成服務的那些情況下正常工作。
  • 當服務方法花費很長時間完成時,WCF調用將失敗,並顯示上述異常消息。

客戶端綁定的sendTimeout屬性已增加到30分鐘以適應服務方法完成所需的時間。

+0

你使用什麼客戶端來使呼叫失敗? – 2009-11-27 08:54:46

回答

2

嘗試設置receiveTimeout等於或大於它需要的服務方法完成的時間越大。 receiveTimeout屬性的默認值爲10分鐘。因此,如果服務方法需要較長時間才能完成連接,則會關閉(如果在發生receiveTimeout之前沒有其他活動發生)。 receiveTimeout財產被描述爲here

這樣
+0

我改變了這些超時屬性,仍然有同樣的問題。我在合同中使用了[OperationContract(IsOneWay = true)]。你相信超時是一個問題嗎?我的其他服務操作很好,但只有這一個不起作用。你有什麼線索嗎? – 2010-07-05 03:32:15

2

很長的操作應最有可能被異步調用的 - 換句話說,客戶要求服務器準備數據,然後獲取與別的東西,而服務器做的工作。當服務器結束時,它會回撥客戶端。

討論異步WCF操作here

相關問題