У меня есть обработчик ошибок 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();
}
Однако, я получаю «Это сообщение не может поддержать операцию, так как он был скопирован», как Я предполагаю, что сообщение было скопировано ранее где-то через фреймворк? Во всяком случае, я сейчас не понимаю, как достичь требуемой функциональности. У кого-нибудь есть предложения?
Заранее спасибо
Но мне нужно получить доступ к телу сообщения, и я получаю ошибки всякий раз, когда я пытаюсь это сделать, поэтому я думал, что вам нужно попытаться создать буферизованную копию, но это также возвращает ошибку? Спасибо –
Ах, неважно, я являюсь наркотиком! Я могу просто использовать его, так как это без того, чтобы получить тело или что-то еще. Doh! –
Буферизованная копия того, что вы используете, когда хотите отправить одно и то же сообщение несколько раз. Вы должны создать его, прежде чем сообщение будет отправлено в первую очередь. В этом случае у вас есть полное сообщение в виде строки с использованием метода ToString(). – Maurice