2010-05-21 32 views
2

我正在爲我的WCF服務使用會話模式。問題如下:如果會話中斷並且不再存在,客戶端在調用合同之前無法知道它。如何在調用合同方法之前檢測到WCF會話崩潰?

例如,如果服務已重新啓動,則客戶端的會話標識無效,因爲該會話在服務器端已關閉。

我在調用合同前檢查通道狀態,並且即使會話已損壞,其值爲CommunicationState.Opened。因此,當我在此檢查後致電合同時,我收到此消息的CommunicationException:

遠程端點不再識別此序列。這很可能是由於遠程終端上的終止。 wsrm:Identifier的值不是已知的序列標識符。可靠的會話有問題。

有什麼解決方法嗎?我需要一種方法來在調用合同之前獲得適當的會話狀態,以便在不發生異常的情況下恢復它。

P.S. CommunicationException類型是通用的,所以我無法通過捕獲此異常來檢測會話崩潰。

P.P.S.我已經問過類似的問題here,但在那種情況下,我不知道原因,現在我不知道如何逃避它。

回答

3

不,沒有解決方法 - 你所能做的(應該做的)就是使用適當的防禦性編程原則,以便能夠在發生這種情況時捕捉和處理這些異常。

如果服務器崩潰或網絡出現故障,不幸的是,沒有任何機制可以通知所有潛在客戶這種情況 - 他們會在下次嘗試呼叫時發現它們。

更新:是的,CommunicationException只是公共基類與WCF所有異常 - 檢查出MSDN docs看到所有後代異常,你可以捕捉到更具體 - EndpointNotFoundExceptionFaultException(或FaultException<T>ProtocolException和許多更多!

+0

是的,它似乎唯一的方法是捕獲異常,但CommunicationException類型太籠統。 – 2010-05-24 08:18:17

相關問題