2014-01-25 36 views
0

在WCF服務方法中,是否有可能捕獲客戶端的通道故障?目前,我只能夠通過捕捉通道故障:捕獲服務方法中的通道故障?

OperationContext.Current.Channel.Faulted += new EventHandler(Channel_Faulted); 

不過,我想被中斷的服務方法(即拋出一個異常)如果響應無法傳遞到客戶端。目前,儘管通道出現故障(根據Faulted事件),但我的服務繼續向客戶端發送響應,但不會丟棄任何內容。

附加說明:我使用netTcpBinding進行可靠的會話,但仍然在服務發送響應並且沒有客戶端時,我沒有發生異常。

回答

0

爲什麼你希望你的服務在沒有客戶端時拋出異常?

WCF本質上是一個郵件系統,就像我們的郵政系統一樣。如果您作爲客戶給我發了一封信,我(服務)會回覆您的地址。我只是假設你仍然生活在那裏,並且你還會活着讀我的迴應。

即使我在晚間新聞中看到你被卡車淹沒了(我們希望不是;-)),而我正在寫我的回覆。爲什麼我需要喊'嘿,我不能把我的回覆發給那個人!'?沒有人會聽我的。你不再在意......

可靠的會話只是在兩者之間增加一個額外的確認步驟。你寄給我這封信,我回答說'我收到你的信,我稍後會回覆'。如果您沒有得到答覆,您只需重發您的原始信件,我會注意到您再次寄給我同一封信。所以我會再次迴應。迴應的同一故事。如果我沒有得到你的'我有你的迴應'的信息,我會嘗試再次,一次又一次地作出迴應。直到我終於放棄......或者是因爲我看了晚間新聞,或者我厭倦了再次寫同一封信。但最終的結果是一樣的。我仍然沒有人吼叫,因爲你不再聽我說了......

這個故事在雙面綁定中是不同的。然後通信在服務器收到消息時結束。然後角色變得顛倒(服務器成爲客戶端,客戶端成爲服務器)。服務器(現在是客戶端)將返回通道上的新通信發送到客戶端(現在是服務器)。並且由於該調用是由方法調用觸發的,因此該方法調用將失敗,並在服務器端發生異常。