从WCF服务中抛出FaultException <t>导致'此错误的创建者未指定原因。'</t>

时间:2012-03-08 08:55:20

标签: c# wcf error-handling

投掷FaultException<CustomFault>时这样:

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运行示例项目,我得到了同样的行为。也许这是由.NET中的更新引起的,文档/样本没有更新。

1 个答案:

答案 0 :(得分:9)

错误原因详细信息是可选的

WCF使用FaultException.Reason属性的值来填充the SOAP specification所需的SOAP Fault的<faultstring>元素:

  

<强> faultstring
  faultstring元素旨在提供人类可读的故障解释,而不是用于算法   处理。 [...] 它必须存在于SOAP Fault元素中   应该至少提供一些解释性质的信息   故障。

因此,当您从WCF服务中抛出FaultException时,必须为错误提供