2016-05-31 77 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" /> 

回答