首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WCF 異常處理基石:從 SOAP Fault 到 FaultException 的完整映射關係(上)

     編輯:關於.NET

WCF 本質是訊息處理框架,異常最終以 Fault 訊息承載。SOAP 仍是主流,WS-* 標準多建立於 SOAP 之上。本文依 SOAP 1.2 規格剖析 SOAP Fault 結構,並對應 WCF 的 FaultException 體系。

一、SOAP 1.2 Fault 結構詳細規範

完整 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 五大子元素規範:

  1. Code(必須):錯誤代碼分類。包含必須的 Value(預定義枚舉:VersionMismatch、MustUnderstand、DataEncodingUnknown、Sender、Receiver)與可選 SubCode(應用自定義代碼,支援層級結構)。
  2. Reason(必須):錯誤原因描述。含一或多個 Text,支援多語言(xml:lang)。
  3. Node(可選):導致錯誤的 SOAP 節點 URI。
  4. Role(可選):錯誤節點扮演的角色 URI。
  5. Detail(可選):詳細錯誤資訊,可包含任意 XML,對應 FaultException<TDetail> 的明細物件。

二、WCF 異常物件:FaultException 體系

WCF 資料形態分 XML(訊息層)與託管物件(編程層)。SOAP Fault 對應 FaultException。

1. FaultCode:錯誤代碼物件模型

FaultCode 對應 SOAP Code,支援層級結構(SubCode 屬性為 FaultCode 型別)。提供靜態工廠方法 CreateSenderFaultCode/CreateReceiverFaultCode 快速建立預定義代碼。IsPredefinedFault 依命名空間判斷是否預定義(SOAP 1.1/1.2/MS 命名空間)。

2. FaultReason:多語言錯誤原因

FaultReason 包含 FaultReasonText 集合,每個綁定特定文化(CultureInfo 或 xml:lang)。支援多語言錯誤描述,預設用當前執行緒文化。

3. FaultException<TDetail>:強型別錯誤明細

需傳遞結構化錯誤資訊時使用泛型 FaultException<TDetail>。TDetail 必須可序列化(通常為資料契約)。透過 FaultContractAttribute 套用於操作契約。序列化時 Detail 物件生成 SOAP Detail 元素。

至此完成 SOAP Fault 與 FaultException 映射介紹。下篇將深入異常處理框架轉換機制。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved