我試圖通過使用集中的異常處理在我的WCF服務ErrorHandler
(System.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");
}
的ValidationHandler
是System.Exception
但沒有datacontract
屬性。 ValidationHandler
包含MainValidation
的列表,其中存儲了所有數據,並且此類使用datacontract
屬性進行了裝飾。
ErrorHandler.HandleException
將ValidationHandler
翻譯爲FaultException<MyCustomFault>
是含MainValidation
(datacontract
)列表中包含ExceptionContainer
(datacontract
)的自定義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" />