共用方式為


WCF 錯誤處理

WCF 應用程式所遇到的錯誤屬於三個群組的其中一個:

  1. 通訊錯誤

  2. 代理/通道錯誤

  3. 應用程式錯誤

當網路無法使用、用戶端使用不正確的位址,或服務主機未接聽傳入訊息時,就會發生通訊錯誤。 此類型的錯誤會以 CommunicationExceptionCommunicationException衍生類別的形式傳回給用戶端。

Proxy/通道錯誤是發生在通道或代理內部的錯誤。 此類型的錯誤包括:嘗試使用已關閉的 Proxy 或通道、用戶端與服務之間的合約不符,或服務拒絕客戶端的認證。 此類別中有許多不同類型的錯誤,無法在這裡列出太多錯誤。 此類型的錯誤會傳回至用戶端 as-is(例外狀況物件上不會執行任何轉換)。

應用程式錯誤會在服務作業執行期間發生。 這類錯誤會以FaultExceptionFaultException<TDetail>的形式傳送至客戶端。

WCF 中的錯誤處理是由下列一或多個執行:

  • 直接處理拋出的例外狀況。 這僅適用於通信與代理/通道錯誤。

  • 使用錯誤合約

  • 實作 IErrorHandler 介面

  • 處理 ServiceHost 事件

錯誤合約

錯誤合約可讓您以獨立平臺的方式定義服務作業期間可能發生的錯誤。 根據預設,從服務作業內擲回的所有例外狀況都會以 物件的形式 FaultException 傳回給用戶端。 物件 FaultException 將包含很少的資訊。 您可以藉由定義錯誤合約並將錯誤傳回為 FaultException<TDetail>,來控制傳送給客戶端的資訊。 如需詳細資訊,請參閱 指定及處理合約和服務中的錯誤

IErrorHandler

介面 IErrorHandler 可讓您更充分掌控 WCF 應用程式回應錯誤的方式。 它可讓您完全控制傳回給客戶端的錯誤訊息,並可讓您執行自定義錯誤處理,例如記錄。 如需 IErrorHandler擴充錯誤處理和報告控制 的詳細資訊

ServiceHost 事件

類別 ServiceHost 會裝載服務,並定義處理錯誤時可能需要的數個事件。 例如:

  1. Faulted

  2. UnknownMessageReceived

如需詳細資訊,請參閱 ServiceHost