2011-08-10 80 views
0

我有啓用了會話的雙工WCF服務,並且我試圖避免客戶端上的故障狀態異常。如何處理啓用會話的WCF雙工服務中的故障狀態

我發現圍繞這個主題的幾個討論,但我發現所有建議重新創建客戶端代理或通道。非會議重點在啓用會話的雙工服務中。

我的這種做法的問題是,沒有在服務器端每一個會話,並且每個客戶端只有一個服務代理(單服務代理)的實例。由於它是雙工的,在客戶端,有幾個對象正在監聽該服務實例上的事件(從服務器發送到客戶端的消息)。 如果服務處於故障狀態,則不能再使用該服務。如果我丟棄該實例並創建一個新實例,我發現很難再將所有事件處理程序連接到這個新實例。

我應該包裹服務,每一個對象掛接一個事件時,存儲在列表中的處理程序(這樣我就可以重新鉤它,當服務重新創建)?似乎已丟失的代碼,很容易造成內存泄漏......

是否有剛剛重新啓動客戶端代理/通道的方式,不丟棄所有的代理實例? (我正在使用VS生成的代理)

任何想法?

感謝, MAB

回答

2

您不能重新啓動代理。唯一從故障狀態恢復的是中止當前實例並重新創建新實例。在客戶端,您必須正確註銷取決於您的代理實例的所有內容,創建新實例並重新註冊所有內容。一旦你得到有關故障狀態通道的異常(=當你試圖調用服務時),這個整個操作必須發生。娛樂後,您必須再次致電該服務。

在服務端的實例是要麼已經死亡(導致該信道的故障狀態),或會話超時後會死亡。當您嘗試通過從已知客戶端刪除頻道並取消註冊依賴於該頻道的任何內容註冊故障頻道時,您還必須處理出現故障的異常。

+0

壞消息,所以我將不得不編寫所有:-( 然而,這似乎是一些需要對使用啓用會話服務的每個應用程序加以解決。 有誰知道一些圖書館,我可以重用? – Matias

相關問題