2011-02-04 47 views
2

假設我有一個連接到WCF服務或者消息隊列的.NET客戶端應用程序。在程序的正常執行期間,可能會有連接丟失,或者用戶可能被管理員強制註銷,或者管理員嚮應用發送消息以更改並登錄到另一個WCF服務器(例如某些手動負載均衡形式)。對連接丟失做出反應

當許多低級別方法中的任何一個綁定進行WCF調用並且失敗時,客戶端應用程序只會知道這一點。

當發生這樣的事情時,我想讓應用程序及其所有窗口以某種方式被禁用/隱藏,以使對話框/飛濺窗口出現並重新連接,並且一旦窗口再次成功顯示。

怎麼去做這件事?我看到的問題是,首先發現問題的代碼處於最低級別(即可能是由於在主窗口頂部的對話窗口上點擊了按鈕)。有些需要程序直觀地處理它。因此,我假設有一些模式或框架可以幫助解決這個問題?

回答

3

不幸的是,這樣做並不是一個好方法,因爲由它引發的異常將在任何地方啓動,WCF調用可能發生並向上發展,直到出現某種情況。對於HTTP綁定,你知道什麼時候會這樣,因爲WCF在進行顯式調用時只做任何事情,所以你可以捕獲任何斷開/超時異常並適當地處理它們。

對於消息隊列或TCP綁定,我認爲它可能會有點混亂,但策略是一樣的。無論何時你正在進行WCF調用,你都需要注意適當的異常,然後應用程序將不得不調用一些可以改變你的UI的函數。

2

我相信你要找的東西叫做「異常處理」。例外是從底部到頂部的方式。

+0

不,我在說的是某種應用程序的整體事件循環,當發生這種異常時,我們可以暫停應用程序,重新調整,然後恢復應用程序 - 不管哪種方法深入在應用程序的任何地方發現問題。 – 2011-02-04 01:44:08

0

您可能應用的一種可能的解決方案是您可能會調用某種非事務性方法,該方法將在固定的時間間隔內返回最小結果。或者,如果您可以獲取實例化的wcf客戶端的底層套接字對象;檢查的開銷並不大。雖然socket對象可能沒有某種與斷開有關的事件,你只能在你試圖與另一端進行溝通的時候檢查,但我可能對此有錯。