投掷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中的更新引起的,文档/样本没有更新。
答案 0 :(得分:9)
错误原因,详细信息是可选的。
WCF使用FaultException.Reason属性的值来填充the SOAP specification所需的SOAP Fault的<faultstring>
元素:
<强> faultstring 强>
faultstring元素旨在提供人类可读的故障解释,而不是用于算法 处理。 [...] 它必须存在于SOAP Fault元素中 应该至少提供一些解释性质的信息 故障。
因此,当您从WCF服务中抛出FaultException时,必须为错误提供。