我目前正在做一些研究如何處理異常,並讓客戶端知道調用WCF服務(在Windows服務中自託管)的winforms應用程序。這是最好的方法是什麼?幾個問題:從winforms應用程序捕獲wcf異常的最佳實踐
1)如果我讓異常傳播,它會出現在客戶端。 2)在客戶端捕捉異常的最佳方式是什麼?它是:
catch (FaultException<T> fault) { }
(空的catch塊僅用於演示目的)。還是有另一種方式?
我目前正在做一些研究如何處理異常,並讓客戶端知道調用WCF服務(在Windows服務中自託管)的winforms應用程序。這是最好的方法是什麼?幾個問題:從winforms應用程序捕獲wcf異常的最佳實踐
1)如果我讓異常傳播,它會出現在客戶端。 2)在客戶端捕捉異常的最佳方式是什麼?它是:
catch (FaultException<T> fault) { }
(空的catch塊僅用於演示目的)。還是有另一種方式?
您需要將每個調用放在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,因爲它有一些好的建議/
你應該總是至少抓CommunicationException,這FaultException
(及其他)從派生。一般情況下,在開發服務期間只能獲得FaultException
(在調試時設置IncludeExceptionDetailInFaults
以獲得更好的故障)。 CommunicationException
可能發生在服務未運行時,以及許多其他原因。您可能想要閱讀this MSDN article以獲取有關您的WCF服務中的錯誤處理的更多信息。
'CommunicationException'的'catch'塊不可用。你需要妥善安排你的例外。 – 2011-05-10 00:04:34
應該有一些/所有這些捕獲的東西進入全局異常處理程序,所以它在一個地方處理?如果WCF調用是異步的(並且它們可能應該用於桌面應用程序),那麼只需捕獲任何異常,然後將其組裝到UI線程並拋出。 – 2011-05-10 00:07:08
哈哈是公平的電話馬修。看起來像我需要更多關注我的代碼片段。 – Rob 2011-05-10 00:17:07