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


107

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


4
Сервисы трассировки WCF довольно хороши сами по себе, включая приятный графический интерфейс для их просмотра. msdn.microsoft.com/en-us/library/ms751526.aspx
Kenny

Ответы:


148

Вам нужно добавить это в свой web.config

<system.net>
  <defaultProxy>
    <proxy bypassonlocal="False" usesystemdefault="True" proxyaddress="http://127.0.0.1:8888" />
  </defaultProxy>
</system.net>
  1. затем запустите Fiddler на машине WEBSERVER.
  2. Щелкните Инструменты | Параметры Fiddler => Подключения => настройте порт на 8888. (разрешите удаленный доступ, если вам это нужно)
  3. Хорошо, затем из меню файла захватите трафик.

Это все, но не забудьте удалить строки web.config после закрытия скрипта, потому что, если вы этого не сделаете, это приведет к ошибке.

Ссылка: http://fiddler2.com/documentation/Configure-Fiddler/Tasks/UseFiddlerAsReverseProxy


1
Спасибо, это мне тоже очень помогло. Моя ошибка заключалась в том, что я не указал http://адрес прокси. В остальном все было так же, как вы упомянули.
Johnny_D

1
У меня это не сработало. Моя ситуация такова: сервер - это IIS7.5, клиент - это консольное приложение. В моем консольном приложении я вызвал метод WebService, который развернут на IIS7.5 на моем компьютере разработки. Замена "localhost" на имя моего компьютера работало для меня.
York

5
Спасибо, у меня сработало. Между прочим, в моем случае я попытался захватить клиентский трафик WCF на localhost , поэтому помимо добавления ваших настроек также необходимо было изменить URL-адрес с http://localhost/abc.svcнаhttp://HOSTNAME/abc.svc
cateyes

1
По какой-то причине у меня не получилось (я использую веб-сервис .svc). В конце концов, моим обходным решением было использование ловушки для окон
Рен

2
Потрясающие! Предложение @cateyes сделало это для меня
Александр Дерк

9

Fiddler слушает исходящие запросы, а не входящие, поэтому вы не сможете отслеживать все запросы, поступающие в вашу службу, с помощью Fiddler.

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

Если вам нужен более мощный (но более сложный в использовании) инструмент, который позволит вам отслеживать ВСЕ входящие запросы, вам следует попробовать WireShark.

редактировать

Я исправился. Спасибо Эрику Лоу за публикацию инструкций по настройке Fiddler в качестве обратного прокси !


Спасибо за информацию. Мне нужно просмотреть структуру запроса, аналогичную странице описания для служб asmx. У WCF, похоже, нет этой опции.
Quadwwchs 07

9
Это не совсем точно (и «мощность» субъективна, поскольку WireShark не может изменять трафик). См. Fiddler2.com/fiddler/help/reverseproxy.asp для получения дополнительных сведений о том, как прослушивать входящий трафик.
EricLaw 07

Эрик - Я предлагаю вам указать это в отдельном ответе.
Cheeso 07

9

У меня была эта проблема, у меня сработало использование localhost.fiddler:

 <endpoint address="http://localhost.fiddler/test/test.svc"
            binding="basicHttpBinding" 
            bindingConfiguration="customBinding" 
            contract="test" 
            name="customBinding"/>

6

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

В основном см. Http://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/ConfigureDotNETApp

  • Запустите Fiddler перед своим приложением
  • В консольном приложении вам может не понадобиться указывать proxyaddress:

    <proxy bypassonlocal="False" usesystemdefault="True" />
  • В веб-приложении / чем-то, размещенном в IIS, вам необходимо добавить proxyaddress:

    <proxy bypassonlocal="False" usesystemdefault="True" proxyaddress="http://127.0.0.1:8888" />
  • Когда .NET делает запрос (через клиент службы или HttpWebRequestт. Д.), Он всегда будет обходить прокси-сервер Fiddler для URL-адресов, содержащихся localhost, поэтому вы должны использовать псевдоним, например имя машины, или создать что-то в вашем файле 'hosts' (вот почему что то вроде localhost.fiddlerили http://HOSTNAMEработает)
  • Если вы укажете proxyaddress, вы должны удалить его из своей конфигурации, если Fiddler не включен, или любые запросы, которые делает ваше приложение, вызовут исключение, например:

    Невозможно установить соединение, поскольку целевая машина активно отказалась от него 127.0.0.1:8888

  • Не забудьте использовать преобразования конфигурации, чтобы удалить секцию прокси в продакшене.

4

Все, что вам нужно, это изменить адрес в клиенте конфигурации: вместо localhost измените имя компьютера или IP


1

Это просто, если у вас есть контроль над клиентом, который отправляет сообщения. Все, что вам нужно сделать, это установить HttpProxy в классе обслуживания на стороне клиента.

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

Это сработало отлично.

Если ваш клиент является клиентом WCF, просмотрите эти вопросы и ответы, чтобы узнать, как настроить прокси.

Даже если у вас нет возможности изменять код клиентского приложения, вы можете настроить прокси-сервер административно, в зависимости от стека веб-сервисов, который использует ваш клиент.


1

Стандартная трассировка / диагностика WCF

Если по какой-то причине вы не можете заставить Fiddler работать или предпочитаете регистрировать запросы другим способом, другой вариант - использовать стандартные функции трассировки WCF. Это создаст файл с удобным средством просмотра.

Документы

См. Https://docs.microsoft.com/en-us/dotnet/framework/wcf/samples/tracing-and-message-logging

Конфигурация

Добавьте в конфигурацию следующее, убедитесь, что оно c:\logsсуществует, перестройте и сделайте запросы:

  <system.serviceModel>
    <diagnostics>
      <!-- Enable Message Logging here. -->
      <!-- log all messages received or sent at the transport or service model levels -->
      <messageLogging logEntireMessage="true"
                      maxMessagesToLog="300"
                      logMessagesAtServiceLevel="true"
                      logMalformedMessages="true"
                      logMessagesAtTransportLevel="true" />
    </diagnostics>
  </system.serviceModel>

  <system.diagnostics>
    <sources>
      <source name="System.ServiceModel" switchValue="Information,ActivityTracing"
        propagateActivity="true">
        <listeners>
          <add name="xml" />
        </listeners>
      </source>
      <source name="System.ServiceModel.MessageLogging">
        <listeners>
          <add name="xml" />
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add initializeData="C:\logs\TracingAndLogging-client.svclog" type="System.Diagnostics.XmlWriterTraceListener"
        name="xml" />
    </sharedListeners>
    <trace autoflush="true" />
  </system.diagnostics>

0

Я использовал инструмент Wire Shark для мониторинга вызовов службы из приложения Silver Light в браузере в службу. попробуйте ссылку дает четкую информацию

Это позволяет вам контролировать все содержимое запроса и ответа.


0

Я просто попробовал первый ответ Брэда Рема и пришел к этому параметру в web.config в разделе BasicHttpBinding:

<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding bypassProxyOnLocal="False" useDefaultWebProxy="false" proxyAddress="http://127.0.0.1:8888" ...
        ...
      </basicHttpBinding>
    </bindings>
    ...
<system.serviceModel>

Надеюсь, это кому-то поможет.


0

Вы можете использовать бесплатную версию HTTP Debugger.

Это не прокси, и вам не нужно вносить никаких изменений в web.config.

Кроме того, он может показать и то, и другое; входящие и исходящие HTTP-запросы. HTTP-отладчик бесплатно

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.