Просмотр необработанного XML-запроса - PullRequest
5 голосов
/ 15 декабря 2009

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

Моя проблема в том, что у меня есть сырые примеры XML, как должны выглядеть вызовы веб-службы, и я хочу иметь возможность "сравнить" их с теми вызовами, которые я делаю. По сути, мне нужно убедиться, что выполняемые мной вызовы совпадают с примерами XML-файлов для целей тестирования.

Имеет ли смысл то, что я спрашиваю, или я поступаю неправильно? Пожалуйста, дайте мне знать, если есть какая-то необходимая информация, которую я пропустил, я мог бы постучать по абзацам, но не уверен, какая информация актуальна.

Ответы [ 5 ]

10 голосов
/ 21 декабря 2009

Вы можете использовать трассировку WCF для регистрации необработанных сообщений XML. .config включает трассировку WCF с необработанным ведением журнала сообщений:

<configuration>
  <system.serviceModel>
    <diagnostics>
      <messageLogging maxMessagesToLog="30000"
              logEntireMessage="true"
              logMessagesAtServiceLevel="true"
              logMalformedMessages="true"
              logMessagesAtTransportLevel="true">
      </messageLogging>
    </diagnostics>
  </system.serviceModel>
  <system.diagnostics>
    <sources>
      <source name="System.IdentityModel" switchValue="Verbose" logKnownPii="true">
        <listeners>
          <add name="xml" />
        </listeners>
      </source>
      <!-- Log all messages in the 'Messages' tab of SvcTraceViewer. -->
      <source name="System.ServiceModel.MessageLogging">
        <listeners>
          <add name="xml" />
        </listeners>
      </source>
      <!-- ActivityTracing and propogateActivity are used to flesh out the 'Activities' tab in
           SvcTraceViewer to aid debugging. -->
      <source name="System.ServiceModel" switchValue="Error, ActivityTracing" propagateActivity="true">
        <listeners>
          <add name="xml" />
        </listeners>
      </source>
      <!-- This records Microsoft.IdentityModel generated traces, including exceptions thrown
           from the framework. -->
      <source name="Microsoft.IdentityModel" switchValue="Warning">
        <listeners>
          <add name="xml" />
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add name="xml" type="System.Diagnostics.XmlWriterTraceListener" initializeData="trace.e2e" />
    </sharedListeners>
    <trace autoflush="true" />
  </system.diagnostics>
</configuration>

Подробнее о трассировке WCF можно узнать из MSDN: настройка трассировки .

Microsoft предоставляет Service Trace Viewer Tool для чтения файлов .svclog.

Убедитесь, что путь, определенный в initializeData, доступен для записи вашей службой.

2 голосов
/ 15 декабря 2009

Стандартный ответ для этого - использовать fiddler в качестве прокси - это позволит вам просматривать исходящие и входящие сообщения между вашим клиентом и службой.

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

2 голосов
/ 15 декабря 2009

Использовали ли вы средство просмотра служебных трасс от Microsoft? Эта страница MSDN даст вам подробную информацию о том, как ее использовать.

0 голосов
/ 22 декабря 2009

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

0 голосов
/ 21 декабря 2009

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

Вот хороший пост о том, как это сделать ==> http://www.keithelder.net/blog/archive/2008/01/15/How-to-Get-Around-WCFs-Lack-of-a-Preview-Web.aspx

...