WCF - 捕获服务器上的错误并返回自定义类型

时间:2010-10-25 12:37:04

标签: wcf exception-handling

我们试图找出一种方法来修改WCF服务行为以捕获所有异常而不是将错误返回给客户端,它将使用异常数据填充自定义返回对象并返回该异常数据。到目前为止,我们没有太多运气。我找到了这个例子:Catching custom faults

但是,它不会像我们希望的那样返回自定义类型。还有哪些其他选择?

谢谢!

3 个答案:

答案 0 :(得分:0)

我在另一个答案中提到了这篇文章,但它也可能对你有帮助.. WCF Exception Handling

文章为Simplifying WCF: Using Exceptions as Faults

答案 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)。