FaultContractAttribute 允許同一操作多次套用(AllowMultiple=true),對應不同異常場景。但需遵循嚴格規則,否則服務啟動或元資料發布會失敗。
同一操作對同一類型套用兩次 FaultContractAttribute 會拋出 InvalidOperationException。但若指定不同 Name 或 Namespace 則允許。
不同錯誤類型若指定相同 Name+Namespace(即相同 QName),同樣拋出 InvalidOperationException。
不同類型但資料契約名稱/命名空間相同(透過 DataContractAttribute 指定),服務啟動正常,但透過 HTTP-GET/MEX 獲取 WSDL 時會因字典 Key 衝突失敗。若兩資料契約完全等效(成員名稱/型別均同),WCF 會自動忽略其一以保證元資料生成。
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 序列化結果。