0

WCF 新手警报。我正在阅读“学习 WCF”和“编程 WCF 服务”,这两本书都建议抛出 FaultException<T>。如果 T 是 .NET 类型“DivideByZeroException”并假设存在一个 FaultContract

[FaultContract(typeof(DivideByZeroException))]

在方法“Divide”上,使用该 WCF 服务和方法的非 .NET 客户端是否能够理解和处理该 .NET 异常?如果是,是否因为类型信息 (DivideByZeroException) 是客户端有权访问和使用的元数据的一部分(由于 FaultContract)?

谢谢你的帮助。

4

1 回答 1

1

您可以抛出FaultContract<DivideByZeroException>,但通常您不应该这样做,这正是您提到的原因 (*)。通常推荐的是与来自异常的信息(例如异常消息)建立数据协定,然后拥有FaultContract该类型的数据协定。

[DataContract]
public class MyErrorDetails
{
    [DataMember]
    public string ErrorCode { get; set; }
    [DataMember]
    public string ErrorMessage { get; set; }
}

然后使用

[FaultContract(typeof(MyErrorDetails))]

(*) 避免将异常作为故障返回的另一个原因是它们向客户披露的信息比客户需要的多;堆栈跟踪之类的东西被异常序列化,但这是服务内部的一些信息,不应该发送给客户端。

于 2012-09-24T21:02:31.593 回答