WCF 本質是訊息處理框架,異常最終以 Fault 訊息承載。SOAP 仍是主流,WS-* 標準多建立於 SOAP 之上。本文依 SOAP 1.2 規格剖析 SOAP Fault 結構,並對應 WCF 的 FaultException 體系。
完整 Fault SOAP 範例:
<s:Envelope ...>
<s:Header>...</s:Header>
<s:Body>
<s:Fault>
<s:Code>...</s:Code>
<s:Reason>...</s:Reason>
<s:Node>...</s:Node>
<s:Role>...</s:Role>
<s:Detail>...</s:Detail>
</s:Fault>
</s:Body>
</s:Envelope>
SOAP Fault 五大子元素規範:
Value(預定義枚舉:VersionMismatch、MustUnderstand、DataEncodingUnknown、Sender、Receiver)與可選 SubCode(應用自定義代碼,支援層級結構)。Text,支援多語言(xml:lang)。FaultException<TDetail> 的明細物件。WCF 資料形態分 XML(訊息層)與託管物件(編程層)。SOAP Fault 對應 FaultException。
FaultCode 對應 SOAP Code,支援層級結構(SubCode 屬性為 FaultCode 型別)。提供靜態工廠方法 CreateSenderFaultCode/CreateReceiverFaultCode 快速建立預定義代碼。IsPredefinedFault 依命名空間判斷是否預定義(SOAP 1.1/1.2/MS 命名空間)。
FaultReason 包含 FaultReasonText 集合,每個綁定特定文化(CultureInfo 或 xml:lang)。支援多語言錯誤描述,預設用當前執行緒文化。
需傳遞結構化錯誤資訊時使用泛型 FaultException<TDetail>。TDetail 必須可序列化(通常為資料契約)。透過 FaultContractAttribute 套用於操作契約。序列化時 Detail 物件生成 SOAP Detail 元素。
至此完成 SOAP Fault 與 FaultException 映射介紹。下篇將深入異常處理框架轉換機制。