2012-03-22 3 views
2

Я использую службу WCF и объекты WSDL для сборки тела. Мне нужно захватить запрос/ответ тела меланомы. Мне не нужно редактировать сообщение, просто заглядывать или сохранять/записывать его.Захват тела SOAP из службы WCF

Я попытался с помощью сообщения WCF ведения журнала в соответствии с здесь: http://msdn.microsoft.com/en-us/library/ms730064.aspx

И с помощью средства просмотра трассировки службы Microsoft, это, однако, только показывает мне заголовки и т.д., независимо от настроек, которые я использую.

Также попытались использовать скрипач, который, похоже, игнорирует тело запроса.

Так ... мне нужно сделать что-то вроде того, что описано здесь: How do I get the XML SOAP request of an WCF Web service request?

Зритель след выглядит хорошо & Я надеялся, что я мог бы захватить все сообщение, включая тела с помощью этого.

Для стандартных услуг WS Я использовал слушателя, как описано здесь: http://blog.encoresystems.net/articles/how-to-capture-soap-envelopes-when-consuming-a-web-service.aspx

Это работает точно так же, как я wan't и может быть включен/выключен через app.config

+0

Пожалуйста, покажите вашу конфигурацию протоколирования сообщений. Вы можете получить содержимое сообщения. Попробуйте отредактировать конфигурацию с помощью инструмента редактора конфигурации WCF. –

+0

Спасибо вам обоим ... просто нужно было убедиться, что это возможно. Выполняется только трассировка на System.ServiceModel, а не на System.ServiceModel.MessageLogging – baileyswalk

ответ

1

Я гаванью» t были проблемы с захватом всего сообщения с использованием встроенного журналирования WCF. Вы открыли файл svclog с помощью своего любимого текстового редактора и проверили, что все сообщение отсутствует в XML? Посмотрите рекомендуемое развертывание & параметров отладки в этом MSDN article, чтобы узнать, как регистрировать все сообщение. В средстве просмотра трассировки службы убедитесь, что вы выбрали представление «Сообщение» и просмотрите все сообщение в правой нижней панели «Сообщения» или вкладки «XML».

0

Существует гораздо более простой способ сделать это. Объекты запроса и ответа WCF предназначены для сериализации в XML, поэтому просто сериализуйте их в строку - что-то вроде этого.

var requestXml = SaveAsXmlString(request); 

...

public static string SaveAsXmlString<T>(T instance) 
{ 
    var sb = new StringBuilder(); 
    using (var writer = new StringWriter(sb)) 
    { 
    var serializer = new XmlSerializer(typeof (T)); 
    serializer.Serialize(writer, instance); 
    } 
    return sb.ToString(); 
} 

Майк Dennison

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