我是新進WCF的東西。我很想知道異步方法兩件事情:WCF異步方法失敗,因爲網絡不好
由於某種原因,網絡會發生什麼下山時,我發送請求到服務?我能得到任何類型的異常或類似的東西嗎?
如果服務嘗試響應請求時網絡出現故障,會發生什麼情況?結果是否會丟失?
感謝您的幫助!
我是新進WCF的東西。我很想知道異步方法兩件事情:WCF異步方法失敗,因爲網絡不好
由於某種原因,網絡會發生什麼下山時,我發送請求到服務?我能得到任何類型的異常或類似的東西嗎?
如果服務嘗試響應請求時網絡出現故障,會發生什麼情況?結果是否會丟失?
感謝您的幫助!
通過TCP發送的消息(包括HTTP)到WCF去rougly經歷三個階段:
如果連接在1期間丟失,您的服務將看不到該消息,並且您的客戶端將拋出異常。
如果在2連接丟失,我覺得(但你可以很容易地模擬,例如使用Thread.Sleep()
)服務操作繼續執行。
如果連接在3期間丟失,響應將會丟失,但該操作已經運行。
如果服務沒有響應,則會拋出異常。該程序將收到異常。 你可以使用try ... catch塊來捕捉它。然後寫入日誌文件,如果你想記錄它。
根據我的經驗,大多數第一個連接需要時間來初始化。 有時我得到EndpointNotFoundException
或TimeoutException
如果服務dint迴應。
因此,我通過傳遞消息「連接」到服務來創建一個初始化連接的方法,如果建立連接,服務將返回一個「連接」消息。 否則,如果它返回一個異常,我會讓它重試。
我設置了重試次數= 5。因此,如果連接仍未建立,它將循環5次。一旦建立,它將繼續進行下一個過程。
我們不能控制網絡連接,我們不能期望和哪個點,哪個點失敗。 但我們可以在服務失敗時控制我們的程序。取決於你想要做什麼,如果服務失敗。也許清理數據,重新啓動進程或立即停止程序並記錄錯誤以進行調查。
這非常方便,謝謝。您是否有任何關於通過糟糕的連接使用WCF的其他技巧?您是否嘗試過以不同方式拆分數據,使用不同的協議或綁定等?你使用原始TCP比較了嗎?我正在撰寫一個系統,用於在埃塞俄比亞農村地區非常普遍的連接上進行溝通。 – Chris
不是直接的,因爲失敗的請求不會在WCF管道中結束。如果在請求期間連接丟失,_client_將會知道它並且可以對其執行操作。 – CodeCaster
對不起,我問了這個問題。有辦法知道發送迴應失敗嗎?因爲消費者依賴於服務的迴應。謝謝。 – Dilshod
@Dilshod屬性[SendTimeout](http://social.msdn.microsoft.com/Forums/vstudio/en-US/84551e45-19a2-4d0d-bcc0-516a4041943d/explaination-of-different-timeout-types)是發送消息和等待服務器回覆的超時時間,如果連接中斷,您只需等待SendTimeout的時間長度並在您所在的行上引發TimeoutException即可(a)等待結果。 –