我有一個WCF服務與數據庫交談。所有的操作都通過該服務。 向客戶端返回異常的最佳方式是什麼(在本例中是WPF應用程序)。處理異常WPF應用程序與WCF服務
可以說我有GetCustomer在返回客戶列表的服務中。但是這有一個例外。我應該如何將這個異常返回給客戶端?
我有一個WCF服務與數據庫交談。所有的操作都通過該服務。 向客戶端返回異常的最佳方式是什麼(在本例中是WPF應用程序)。處理異常WPF應用程序與WCF服務
可以說我有GetCustomer在返回客戶列表的服務中。但是這有一個例外。我應該如何將這個異常返回給客戶端?
做到這一點的一種方法是將有關任何潛在例外的信息作爲您的服務合同的一部分。因此,在您的示例中,GetCustomer會返回您的客戶列表。但它也會返回一個可能爲空的關於發生的任何異常的數據集。這是一個好主意,因爲並不是所有服務的使用者都將成爲.NET應用程序,而是依靠發送.NET錯誤並不明智。
Microsoft建議實施IErrorHandler爲WCF例外
要明確控制應用程序時的行爲 拋出異常,實現IErrorHandler接口,並將其添加 到ErrorHandlers財產。 IErrorHandler使您能夠明確地控制生成的SOAP錯誤,決定是否將其發送回 客戶端,並執行相關的任務,如日誌記錄。錯誤 處理程序按其添加到 ErrorHandlers屬性的順序調用。
實施ProvideFault方法來控制返回給客戶端的故障消息 。
落實的HandleError方法來確保錯誤有關的行爲,包括 錯誤日誌,保證一個快速失敗,關閉 應用,等等。
Here比MSDN
更好樣品IMyService proxy = ...; //Get proxy from somewhere
try {
proxy.MyMethod();
}
catch (CommunicationException) { ... }
catch (TimeoutException) { ... }
catch (FaultException<MyApplicationFault> myFault) {
MyApplicationFault detail = myFault.Detail;
//Do something with the actual fault
}
catch (FaultException otherFault) { ... }
在您的示例中,如何將此異常/故障返回給客戶端? – VoodooChild 2011-12-20 14:12:03
你不會從服務返回異常,而是從服務拋出它拋出new FaultException
-1:請說明爲什麼這會是一個好主意。 – 2011-12-20 00:15:21