2010-10-25 60 views
1

我们试图找出修改WCF服务行为以捕获所有异常的方法,而不是将错误返回给客户端,它将填充具有例外的自定义返回对象数据并返回。到目前为止,我们没有多少运气。我发现这个例子:Catching custom faultsWCF - 捕获服务器上的故障并返回自定义类型

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

谢谢!

+0

“自定义返回对象”是什么意思? – Nix 2010-10-25 13:04:50

回答

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>并处理它。

0

在我们自己的项目中遇到过这个问题后,我写了一个blog post on this exact topic。基本上,我们选择返回相同的对象类型,以便我们可以将单个侦听器代理附加到所有事件到globally handle certain errors(如用户失去组织权限)。

我没有想过使用FaultException,但我会检查我们如何做到这一点。此设计是在SharePoint 2007内运行并由Silverlight 4使用的WCF服务(.NET 3.5)。