Подтвердить что ты не робот

WCF - проверять отправленные/полученные сообщения?

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

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

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

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


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

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

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

4b9b3361

Ответ 1

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

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

<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

Ответ 2

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

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

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

EDIT: всякий раз, когда мне приходилось захватывать трафик TCP/IP, я использую WireShark. Если вам нужно сделать это программно, вы можете использовать SharpPCAP, поэтому я могу принять меры по тому, что я захватил из сети. Но для устранения неполадок гораздо лучше полагаться на трассировку WCF.

Ответ 3

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

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

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

Ответ 5

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

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