WCF - проверять отправляемые / получаемые сообщения? - PullRequest
38 голосов
/ 02 июня 2011

У меня есть 2 решения: - Серверное решение - Клиентское решение

Сервер регистрируется на моем локальном узле IIS: http://localhost/MyApp/

Клиент добавляет службы WCF (ссылки на службы) с локального узлаapplication: http://localhost/MyApp/MyService.svc

Когда я запускаю клиент, я хочу видеть сообщения, передаваемые туда и обратно.Я скачал Fiddler, но, похоже, он не хочет показывать мне отправляемый трафик, если я на самом деле не использую веб-браузер.Я использую Fiddler неправильно или есть другой инструмент, который я должен использовать для этого?


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

Мне нравится Утилита Журнала Услуг WCF, но я не думаю, что у меня там правильные настройки.Я не вижу фактического мыльного сообщения, только то, что сообщение было получено.

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

Ответы [ 6 ]

40 голосов
/ 27 июля 2012

Для просмотра содержимого сообщения вы должны добавить источник для System.ServiceModel.MessageLogging в вашем файле конфигурации. На вкладке сообщений в средстве просмотра трассировки отображается полное сообщение для определенного вызова службы.

Вот пример файла конфигурации:

<configuration>

...

   <system.diagnostics>
      <sources>
         <source name="System.ServiceModel"
                      switchValue="All"
                      propagateActivity="true">
            <listeners>
               <add name="traceListener" />
            </listeners>
         </source>
         <source name="System.ServiceModel.MessageLogging"
                      switchValue="All">
            <listeners>
               <add name="traceListener" />
            </listeners>
         </source>
      </sources>
      <sharedListeners>
         <add name="traceListener"
                 type="System.Diagnostics.XmlWriterTraceListener"
                 initializeData="c:\Traces.svclog" />
      </sharedListeners>
   </system.diagnostics>

   <system.serviceModel>
   <diagnostics>
      <messageLogging logEntireMessage="true"
                                  logMalformedMessages="true"
                                  logMessagesAtServiceLevel="true"
                                  logMessagesAtTransportLevel="true"
                                  maxMessagesToLog="500"/>
   </diagnostics>

...

</system.serviceModel>

...

</configuration>

Дополнительные сведения см. В разделе «Настройка трассировки» в MSDN. http://msdn.microsoft.com/en-us/library/ms733025.aspx

14 голосов
/ 02 июня 2011

Может быть, я что-то упустил, но ... Почему вы не используете функции трассировки WCF? Это фантастический инструмент для устранения неполадок. Я также использовал его для служб, размещенных в IIS / WAS.

Включение трассировки WCF

Кстати, некоторые люди этого не знают, но вы можете одновременно открывать трассировки на стороне сервера и на стороне клиента, и программа Viewer покажет вам взаимосвязь между действиями сервера и клиента в виде симпатичного графика.

РЕДАКТИРОВАТЬ: всякий раз, когда мне приходилось перехватывать трафик TCP / IP, я использую WireShark . Если вам нужно сделать это программно, вы можете использовать SharpPCAP , чтобы я мог выполнять действия с тем, что я получаю из сети. Но для устранения неполадок гораздо лучше полагаться на трассировку WCF.

5 голосов
/ 02 июня 2011

Если вы хотите проверять сообщения программно, вы можете реализовать IClientMessageInspector интерфейс и зарегистрировать его у своего клиента.

Это позволяет вам получить доступ ко всем сообщениям, независимо от того, какую привязку вы используете, тогда как с помощью таких инструментов, как Fiddler , позволит вам только просматривать сообщения, используя транспортный канал HTTP.

Обратите внимание, что, используя эту технику, вы можете реально изменить сообщения или сделать гораздо больше (например, отключить уведомления). Если все, что вы хотите сделать, - это взглянуть на сообщение, тогда с использованием трассировки может оказаться более простым для вас.

1 голос
/ 02 июня 2011

Ваш сервис SOAP или RESTful?Вы можете использовать WCF Service Trace View Tool для просмотра заголовков и тел SOAP-сообщений.Инструкции по настройке вашего веб-сервиса для трассировки: здесь .

0 голосов
/ 29 апреля 2018

В WCF мы можем использовать другой способ просмотра реальных сообщений SOAP - пользовательский MessageEncoder - низкоуровневая точка расширения конвейера.В отличие от инспекторов сообщений (IDispatchMessageInspector / IClientMessageInspector) он видит исходный байтовый контент, включая любые искаженные данные XML.Вам нужно обернуть стандартную textMessageEncoding как пользовательский связующий элемент и настроить config файл для использования этой пользовательской привязки.

Также вы можете видеть какпример того, как я это сделал в своем проекте - упаковка textMessageEncoding, ведение журнала кодировщик , пользовательская привязка элемент и config .

0 голосов
/ 02 июня 2011

Посмотрите на этот поток StackOverflow: Как использовать Fiddler для мониторинга службы WCF

Он отвечает на некоторые ваши вопросы.вы также можете использовать что-то вроде WireShark, если хотите проверить все по проводам, а не настроить прокси, как это делает Fiddler.

...