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

WCF 訊息錯誤處理核心:MessageFault 與 SOAP Fault 版本無關建模

     編輯:關於.NET

SOAP Fault 結構演進:1.1 到 1.2 的關鍵差異

  • SOAP 1.1:Body 包含必要的 faultcode、faultstring,選擇性 faultactor、detail。
  • SOAP 1.2:基於 Infoset,術語改為必要的 Code、Reason,選擇性 Node、Role、Detail。支援子代碼表達更細粒度錯誤。

兩者本質相似:皆定義錯誤代碼、人類可讀描述、錯誤發生者與詳細資訊。

MessageFault:統一的錯誤資訊模型

MessageFault 以 SOAP 版本無關方式描述錯誤,配合 WCF 分層架構,提供處理訊息與產生例外的極大彈性。

核心建構型別

  • FaultCode:對應 faultcode/Code,工廠方法自動產生 Sender/Receiver 等標準代碼,支援子代碼。
  • FaultReason:對應 faultstring/Reason,支援多語言文化特定描述。
  • Detail 物件:傳遞額外錯誤資訊,必須可序列化。強烈建議 使用自訂型別而非 Exception,第 9 章將說明契約設計影響。

建立 MessageFault 範例

FaultCode faultCode = FaultCode.CreateReceiverFaultCode("MyFaultCode", "urn:MyNS");
FaultReason faultReason = new FaultReason("The value must be > 10");
SomeFaultDetail faultDetail = new SomeFaultDetail("Contoso", "SomeApp");
MessageFault messageFault = MessageFault.CreateFault(faultCode, faultReason, faultDetail);

從 MessageFault 建立 Message:版本無關的實證

同一個 MessageFault 實例,搭配不同 MessageVersion 即可產出 SOAP 1.1 或 1.2 Fault 訊息:

Message message = Message.CreateMessage(version, messageFault, "urn:SomeFaultAction");

輸出對比顯示:
SOAP 1.1 使用 faultcode/faultstring/detail;
SOAP 1.2 使用 Code/Subcode/Reason/Detail。
核心價值:WCF 基礎結構僅在傳輸層決定 SOAP 版本,實現熱插拔與可擴充架構。

附錄:SOAP Fault 元素與代碼快速查閱

子元素說明
faultcode識別故障代碼
faultstring人類可讀說明
faultactor引發故障者資訊
detail應用程式專用錯誤資訊
錯誤代碼描述
VersionMismatchEnvelope 命名空間無效
MustUnderstand無法理解 mustUnderstand=1 的 Header 子元素
Client訊息構成錯誤或資訊不正確
Server伺服器端問題無法處理
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved