WCF新手提醒。我正在阅读“学习WCF”和“编程WCF服务”,其中两本书都建议抛出FaultException< T>。如果T是.NET类型“DivideByZeroException”并假设FaultContract与
一起存在[FaultContract(typeof运算(DivideByZeroException))]
在方法“Divide”上,使用该WCF服务和方法的非.NET客户端是否能够理解并处理该.NET异常?如果是,是因为类型信息(DivideByZeroException)是客户端有权访问和使用的元数据(因为FaultContract)的一部分吗?
感谢您的帮助。
答案 0 :(得分:1)
你可以抛出一个FaultContract<DivideByZeroException>
,但一般情况下你不应该这样做,完全是因为你提到的原因(*)。通常建议的是与异常中的信息(例如异常消息)建立数据协定,然后使用该类型的FaultContract
。
[DataContract]
public class MyErrorDetails
{
[DataMember]
public string ErrorCode { get; set; }
[DataMember]
public string ErrorMessage { get; set; }
}
然后使用
[FaultContract(typeof(MyErrorDetails))]
(*)避免将异常作为错误返回的另一个原因是它们向客户端披露的信息多于客户需要的信息;堆栈跟踪之类的东西是由异常序列化的,但这是服务内部的一些信息,不应该发送给客户端。