2016-05-31 115 views
0

我试图通过使用集中的异常处理在我的WCF服务ErrorHandlerSystem.ServiceModel.Dispatcher.IErrorHandlerWCF和自定义错误?

这是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.HandleExceptionValidationHandler翻译为FaultException<MyCustomFault>是含MainValidationdatacontract)列表中包含ExceptionContainerdatacontract)的自定义FaultException

如果我删除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" /> 

回答