从WCF服务引发FaultException <T>会导致'此故障的创建者未指定Reason.'

Nic*_*sen 8 c# error-handling wcf

FaultException<CustomFault>这样的时候:

throw new FaultException<CustomFault>(new CustomFault("Custom fault message"));
Run Code Online (Sandbox Code Playgroud)

我得到以下内容:"此错误的创建者未指定原因." 现在根据这篇MSDN文章,一个不需要使用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; }
    }
}
Run Code Online (Sandbox Code Playgroud)

有关MSDN文章的评论表明它必须使用另一个FaultReason,但在其他几个地方,我看到有人认为FaultReason除非必要,否则你不应该使用它.

所以我的问题如下; 是否真的必须使用FaultReason,如果不是 - 我如何防止在尝试抛出时引发的异常FaultException

编辑

通过从运行示例项目这篇文章中,我得到了excact相同的行为.也许这是由.NET中的更新引起的,文档/样本没有更新.

Enr*_*lio 10

故障原因是必需的,细节是可选的.

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

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

因此,在从WCF服务抛出FaultException时,必须提供错误原因.