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

WCF 基礎異常處理模式進階:FaultContract 規則與 XmlSerializer 錯誤序列化實戰(下)

     編輯:關於.NET

FaultContractAttribute 允許同一操作多次套用(AllowMultiple=true),對應不同異常場景。但需遵循嚴格規則,否則服務啟動或元資料發布會失敗。

一、重複聲明相同錯誤明細類型

同一操作對同一類型套用兩次 FaultContractAttribute 會拋出 InvalidOperationException。但若指定不同 Name 或 Namespace 則允許。

二、不同類型但相同有效名稱

不同錯誤類型若指定相同 Name+Namespace(即相同 QName),同樣拋出 InvalidOperationException。

三、資料契約 QName 衝突

不同類型但資料契約名稱/命名空間相同(透過 DataContractAttribute 指定),服務啟動正常,但透過 HTTP-GET/MEX 獲取 WSDL 時會因字典 Key 衝突失敗。若兩資料契約完全等效(成員名稱/型別均同),WCF 會自動忽略其一以保證元資料生成。

四、使用 XmlSerializer 序列化錯誤明細

WCF 預設用 DataContractSerializer。套用 XmlSerializerFormatAttribute 可切換操作參數/回傳值序列化器,但預設不控制錯誤明細。需設定 SupportFaults=true 才連帶切換錯誤明細序列化器為 XmlSerializer。

[OperationContract]
[FaultContract(typeof(CalculationError))]
[XmlSerializerFormat(SupportFaults = true)]
int Divide(int x, int y);

此時錯誤明細類型可用 XML 序列化屬性(XmlAttribute/XmlElement)控制輸出格式。產生的 Fault SOAP 中 Detail 內容即為 XML 序列化結果。

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