0

我現在陷入了一個惱人的問題。 我有一個Silverlight 4應用程序(默認運行OOB)。它使用WCF和net.tcp作爲與服務器通信的手段。 客戶端使用wcf客戶端代理的中央實例。只要一切都在服務器端運行,一切都很好。WCF net.tcp服務器斷開連接 - 如何在客戶端正確處理?

如果我在一切中間殺死了服務器,我淹死在客戶端的異常雪崩(連接丟失,通道故障等)。

現在我正在尋找一種方式來處理乾淨和集中的方式(如果集中是可能的話)。

SL應用程序有一個位於App.cs(公共靜態MyClient Client {get; set;})中的中央客戶端對象,它在應用程序啓動時被初始化。

任何想法如何正確處理客戶端對象上的任何連接問題?

回答

1

我想我找到了一個可行的 - 雖然不是集中式的解決方案。與try/catch塊混淆代碼,似乎需要對event.Error屬性進行空值檢查。如果連接發生了什麼,這個屬性總是不爲空。只有在嘗試訪問event.Result時纔會引發異常。

它可能不是最美麗的解決方案,但它似乎工作到目前爲止。

也許有雖然是更優雅的方式......

2

你提到你使用WCF客戶端代理的中央實例。

如果是這種情況,那麼當發生服務器錯誤時,代理將進入Faulted狀態。爲了保持集中,您可以將客戶端代理強制轉換爲ICommuicationObject,並將事件處理程序附加到代替故障代理的Faulted事件中,並在事件觸發時使用新代理。

關於集中訪問資源的線程安全常見警告適用!

+1

其實,我剛剛發現這個博客文章是這樣做的:http://nahidulkibria.blogspot.com/2008/05/knowing-when-wcf-service-in-fault-state.html – 2010-06-16 13:20:07

相關問題