2009-09-09 43 views
0

我有一個使用IErrorHandler接口的WCF錯誤處理程序。在這個錯誤處理程序的HandleError方法中,我將錯誤異常寫入日誌。這一切工作正常。但是,我還需要寫入引發異常的實際消息,並且這不會傳遞給HandleError方法。IErrorHandler獲取原始信息

所以,我一直在尋找的OperationContext,看看是否通過執行類似以下幫助:

MessageBuffer buffer = OperationContext.Current.RequestContext.RequestMessage.CreateBufferedCopy(int.MaxValue); 

Message message = buffer.CreateMessage(); 
using (XmlDictionaryReader reader = message.GetReaderAtBodyContents()) 
{ 
    string content = reader.ReadContentAsString(); 
} 

不過,我不斷收到「此消息不支持的操作,因爲它已經被複制」作爲我認爲這個消息以前被框架複製過了嗎?無論如何,我現在對如何實現所需功能感到不知所措。有沒有人有什麼建議?

在此先感謝

回答

1

OperationContext.Current.RequestContext.RequestMessage點實際的消息,所以你可以只使用它。

+0

但我需要訪問消息正文,並且每當我嘗試執行此操作時都會收到錯誤,因此爲什麼我認爲您必須嘗試創建緩衝副本,但是該錯誤也會返回錯誤? 謝謝 – 2009-09-09 14:33:17

+0

啊,沒關係,我是一個塗料!我可以直接使用它,而無需獲取身體或任何東西。衛生署! – 2009-09-09 14:42:47

+0

當您想多次發送相同的消息時,您使用的緩衝副本。您必須在首先發送消息之前創建它。在這種情況下,您可以使用ToString()方法將完整的消息作爲字符串使用。 – Maurice 2009-09-09 14:47:07