2012-03-08 60 views
8

當投擲FaultException<CustomFault>這樣的:從WCF服務中拋出FaultException <T>原因'此故障的創建者未指定原因。'

throw new FaultException<CustomFault>(new CustomFault("Custom fault message")); 

我得到如下:「此故障的創建者未指定原因」 現在根據this MSDN article一個不需要使用FaultReason

我有以下的服務合同:

[OperationContract] 
[FaultContract(typeof(CustomFault))] 
CustomType[] SomeMethod(int someParameter); 

[DataContract] 
public class CustomFault 
{ 
    private string report; 

    public CustomFault(string message) 
    { 
     this.report = message; 
    } 

    [DataMember] 
    public string Message 
    { 
     get { return this.report; } 
     set { this.report = value; } 
    } 
} 

上有MSDN文章暗示它是強制性使用其他FaultReason評論,但在其他幾個地方,我看到有人爭辯說,除非必要,否則不應使用FaultReason

所以我的問題如下;是否真的必須使用FaultReason,如果不是 - 我怎樣才能防止在試圖拋出FaultException時引發的異常?

編輯

通過運行示例項目從this article我得到excact相同的行爲。也許這是由.NET中的更新引起的,文檔/示例沒有被更新。

+0

每當我在WCF中拋出'FaultException ',我沒有設置'Reason',並且我沒有遇到任何問題。無法說明爲什麼它不適合你,對不起。 – AakashM 2012-03-08 09:35:50

+0

在沒有附加VS調試器的情況下調用服務時,您是否也會遇到異常? – 2012-03-08 09:50:42

+0

不,我不知道。也許這只是調試器中未處理異常級別的問題。但對我來說,文檔使用的是一種導致異常的錯誤處理策略似乎是錯誤的:( – 2012-03-08 10:12:55

回答

9

故障原因是需要的的細節是可選的

WCF使用FaultException.Reason屬性的值來填充SOAP故障,這是由the SOAP specification需要的<faultstring>元件:

faultstring
的faultstring元素的目的是提供人類可讀的解釋並且不適用於算法 處理。 它必須出現在一個SOAP Fault元素中,並且 應該至少提供一些信息來解釋 故障的性質。

因此,從WCF服務扔FaultException當你必須提供故障原因

+0

這使得sence。然而,我在網上找到的所有示例和文檔似乎忽略了這使我認爲可能會有在WCF中解決這個問題的另一種方法? – 2012-03-08 09:30:09

+0

一個完整的示例項目:http://msdn.microsoft.com/en-us/library/ee942778.aspx 和FaultException類文檔:http://msdn.microsoft.com/ EN-US /庫/ ms576199。aspx – 2012-03-08 09:41:09

+0

它似乎只是VS調試器中選擇的中斷選項的問題。 – 2012-03-08 10:14:04

相關問題