2011-05-09 112 views
0

我目前正在做一些研究如何處理異常,並讓客戶端知道調用WCF服務(在Windows服務中自託管)的winforms應用程序。這是最好的方法是什麼?幾個問題:從winforms應用程序捕獲wcf異常的最佳實踐

1)如果我讓異常傳播,它會出現在客戶端。 2)在客戶端捕捉異常的最佳方式是什麼?它是:

catch (FaultException<T> fault) { } 

(空的catch塊僅用於演示目的)。還是有另一種方式?

回答

1

您需要將每個調用放在try {} catch {}塊中,因爲這是從客戶端傳播的地方,可能包含某些可能的異常,將某種代理傳遞給隱藏WCF特定的處理。 使用異常屏蔽,您還可以指定自定義的FaultExceptions並使用屬性修飾方法以允許將異常發送到客戶端。這樣,當異常出現時,你可以更聰明一些。 例如

try{ 
     ... call service 
    }catch(FaultException<TimeoutFault> ex){ 
     .. try one more time 
    }catch(FaultException<InvalidSelection> ex){ 
     ... show message to user from ex.Details.InvalidProperty 
    }catch(FaultException){ 
     ... handle 
    }catch (CommunicationException ex){ 
     ... remember this is WCF so the call itself might fail 
    }catch(Exception ex){ 
    ... handle   
    } 

標識reccomend閱讀http://blogs.msdn.com/b/pedram/archive/2008/01/25/wcf-error-handling-and-some-best-practices.aspx,因爲它有一些好的建議/

+0

'CommunicationException'的'catch'塊不可用。你需要妥善安排你的例外。 – 2011-05-10 00:04:34

+0

應該有一些/所有這些捕獲的東西進入全局異常處理程序,所以它在一個地方處理?如果WCF調用是異步的(並且它們可能應該用於桌面應用程序),那麼只需捕獲任何異常,然後將其組裝到UI線程並拋出。 – 2011-05-10 00:07:08

+0

哈哈是公平的電話馬修。看起來像我需要更多關注我的代碼片段。 – Rob 2011-05-10 00:17:07

1

你應該總是至少抓CommunicationException,這FaultException(及其他)從派生。一般情況下,在開發服務期間只能獲得FaultException(在調試時設置IncludeExceptionDetailInFaults以獲得更好的故障)。 CommunicationException可能發生在服務未運行時,以及許多其他原因。您可能想要閱讀this MSDN article以獲取有關您的WCF服務中的錯誤處理的更多信息。