WCF和自定义错误?

时间:2016-05-31 15:13:36

标签: c# wcf exception fault

我正在尝试使用ErrorHandlerSystem.ServiceModel.Dispatcher.IErrorHandler

集中我的WCF服务中的异常处理

这就是ProvideFault的样子:

public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
    {

        if (error is ValidationHandler)
        {
            var val = error as ValidationHandler;
            var val2 = ErrorHandler.HandleException(val);
            fault = Message.CreateMessage(version, val2.CreateMessageFault(), "http://ns");
        }
        else if (error is FaultException)
            fault = Message.CreateMessage(version, (error as FaultException).CreateMessageFault(), "http://ns");
        else
            fault = Message.CreateMessage(version, ErrorHandler.HandleException(error).CreateMessageFault(), "http://ns");
    }

ValidationHandlerSystem.Exception但没有datacontract属性。 ValidationHandler包含MainValidation的列表,其中存储了所有数据,此类使用datacontract属性进行修饰。

ErrorHandler.HandleException会将ValidationHandler翻译为FaultException<MyCustomFault>,该FaultException是包含ExceptionContainerdatacontract)的自定义MainValidation,其中包含{ {1}}(datacontract)。

如果我删除IErrorHandler并从服务方法直接抛出ErrorHandler.HandleExceptio n一切正常。到达客户端的CustomFault可以处理验证。

但是在使用IErrorHandler时,到达客户端的错误无法转换为FaultException<MyCustomFault>?运行Message.CreateMessage

时,数据似乎丢失了

编辑1:我可以看到从CreateMessageFault生成的MessageFault确实有详细信息,如果我将其转换为MyCustomFault,我可以正确读取内容。问题是为什么到达客户时不包括这个?

编辑2:当异常到达客户端时,我尝试将其强制转换为FaultException但返回null。那么MyCustomFault似乎在路上丢失了?

编辑3:我对配置中的行为进行了以下设置:

<serviceDebug includeExceptionDetailInFaults="true" />
<serviceMetadata httpGetEnabled="true" />

1 个答案:

答案 0 :(得分:0)

我要将“http://ns”更改为null(MyCustomFault.Action)。在这里找到它:WCF: provide generic FaultException in IErrorHandler