我们试图找出一种方法来修改WCF服务行为以捕获所有异常而不是将错误返回给客户端,它将使用异常数据填充自定义返回对象并返回该异常数据。到目前为止,我们没有太多运气。我找到了这个例子:Catching custom faults
但是,它不会像我们希望的那样返回自定义类型。还有哪些其他选择?
谢谢!
答案 0 :(得分:0)
我在另一个答案中提到了这篇文章,但它也可能对你有帮助.. WCF Exception Handling
答案 1 :(得分:0)
如果您希望拥有可互操作且“按标准”的服务,则始终会将FaultException<T>
SOAP错误从您的服务返回给客户端。
由于该类型采用通用<T>
,您基本上可以将任何内容放入该类型以报告错误。该类型需要使用[DataContract]进行修饰,并且需要使用[DataMember]属性传回其成员。
[DataContract]
public class MyErrorInfo
{
[DataMember]
public int ErrorCode { get; set; }
[DataMember]
public string ErrorMessage { get; set; }
}
当您在服务端捕获这些execptions并返回FaultException<MyErrorInfo>
(或者您最终会调用错误类的任何内容)时,您还需要使用
[FaultContract(typeof(MyErrorInfo))]
[OperationContract]
public SomeType SomeMethodCall(SomeType parameter);
以便您的客户能够抓住FaultException<MyErrorInfo>
并处理它。
答案 2 :(得分:0)
我们在自己的项目中遇到这个后写了blog post on this exact topic。基本上,我们选择返回相同的对象类型,以便我们可以将单个侦听器委托附加到globally handle certain errors的所有事件(就像用户失去对组织的权限一样。)
我没有想过使用FaultException,但我会研究如何做到这一点。此设计是在SharePoint 2007中运行并由Silverlight 4使用的WCF服务(.NET 3.5)。