2009-09-09 2 views
0

У меня есть обработчик ошибок WCF, который использует интерфейс IErrorHandler. В методе 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

Но мне нужно получить доступ к телу сообщения, и я получаю ошибки всякий раз, когда я пытаюсь это сделать, поэтому я думал, что вам нужно попытаться создать буферизованную копию, но это также возвращает ошибку? Спасибо –

+0

Ах, неважно, я являюсь наркотиком! Я могу просто использовать его, так как это без того, чтобы получить тело или что-то еще. Doh! –

+0

Буферизованная копия того, что вы используете, когда хотите отправить одно и то же сообщение несколько раз. Вы должны создать его, прежде чем сообщение будет отправлено в первую очередь. В этом случае у вас есть полное сообщение в виде строки с использованием метода ToString(). – Maurice

Смежные вопросы