无故障契约的WCF错误处理

无故障契约的WCF错误处理,wcf,exception,ierrorhandler,Wcf,Exception,Ierrorhandler,我有一个WCF服务,所有操作返回类型均为OperationStatus: [DataContract] public abstract class ServiceResponse { [DataMember] public bool Success { get; set; } [DataMember] public String StatusReason { get; set; } } 我想创建一个ErrorHandler来捕获所有异常,然后我想让它返回到S

我有一个WCF服务,所有操作返回类型均为OperationStatus:

[DataContract]
public abstract class ServiceResponse
{
    [DataMember]
    public bool Success { get; set; }

    [DataMember]
    public String StatusReason { get; set; }

}
我想创建一个ErrorHandler来捕获所有异常,然后我想让它返回到ServiceResponse类的客户机实例,属性Success设置为false,StatusReason设置为“INTERNAL SERROR”


现在我有自己的类来实现IErrorHandler,但我不想使用FaultContract——我只想返回StatusReason类型的客户机常规对象。可以这样做吗?

您确实需要一份故障合同,若要发送原因,请尝试以下操作:

   MyException fault = new MyException("Error message");
   throw new FaultException<MyException>(fault, new FaultReason("Reason Text"));
MyException故障=新的MyException(“错误消息”);
抛出新的FaultException(错误,新的FaultReason(“原因文本”));

您可以添加

 <serviceDebug includeExceptionDetailInFaults="true"/>


您可以访问“服务行为”部分,但这并不是生产环境的最佳选择。

您不想使用故障契约的原因是什么?故障本质上是抛出异常的一种有线友好方式……如果您希望具有互操作性,例如,可以从.NET以外的其他地方调用,则必须使用SOAP故障(FaultException)——这就是它们的设计目的。为什么你需要重新发明轮子,逆流而上??使用这些为您提供的东西-这将大大减少麻烦…WCF可以由非.NET的客户端使用。在这种情况下,标准错误处理可能不是最好的解决方案。为什么???FaultException是处理WCF中错误条件的机制,就像.NET的机制一样