2011-04-25 98 views
3

我有一種情況,我正在尋找建議。WCF抓住異步異常

我有一個WCF服務,其中在一些方法中,我創建了一個對象,該對象又建立到服務器的套接字連接。我將這些連接對象「緩存」到我的服務類中「全局」的字典對象中。一旦建立了這些連接,就會有一個與其中每個連接相關的定時器,定時器回調會定期向服務器發送保持活動消息。

如果出於某種原因導致服務器連接斷開,則會出現問題。當發生這種情況時,我得到一個未處理的異常,似乎殺死了WCF服務。

我希望有一種方法,我可以捕獲這些計時器相關的異常,只需關閉套接字並從緩存中刪除連接對象,但我不知道有一種方法。看起來,一旦我離開使用連接對象的方法,沒有什麼可以捕獲異步異常。

+0

你能發佈有關異常,也許計時器代碼發送保活消息,一些信息呢?你如何連接到服務器?你能向我們展示設置你連接的代碼嗎? – flayn 2011-04-25 21:18:56

+0

您服務中的一些方法似乎很長壽並且長期運行 - 您確定這是一個很好的設計嗎?這是單身服務嗎? – 2011-04-26 10:01:49

回答

0

你需要開發某種連接管理器,它保存並監視每個連接的狀態。保持活動狀態的定時器適用於狀態追蹤,但在使用之前,您仍然需要檢查連接是否有效。

在任何情況下,使用故障連接時發生異常都不應導致WCF服務產生未發現的異常,您應該將對連接管理器的訪問包裝在try-catch子句中。

乾杯,

吉拉德

+0

我想知道是否可以將事件添加到管理連接的對象,以便如果發送時它們捕獲異常,則可以觸發事件。 「管理器」對象具有事件處理程序,可以在事件觸發時從緩存中刪除連接對象。 – 2011-04-27 16:51:33