2009-09-09 44 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