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

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

12 ответов

Вы должны добавить это в свой 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

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

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

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

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

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

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

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

Консолидация оговорок, упомянутых в комментариях / ответах для нескольких вариантов использования.

В основном см. 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

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

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

Измените localhost в URL-адресе на localhost.fiddler, это небольшое изменение сработало для меня.

Также, если кто-то тестирует службу из тестового клиента WCF , не забудьте отредактировать URL-адрес в конечной точке конфигурации.

  1. Щелкните правой кнопкой мыши файл конфигурации
  2. Нажмите Edit with Svc Config Editor.
  3. Щелкните Конечные точки и измените конечную точку на localhost.fiddler.
  4. Установите флажок Запускать новый прокси при вызове метода

Стандартный 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>

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

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

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

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

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

Используйте скрипач, а обратный прокси - это для меня окончательное решение.

Сначала настройте скрипт в качестве обратного прокси с помощью REGDIT, как сказано в документе: https://docs.telerik.com/fiddler/configure-fiddler/tasks/usefiddlerasreverseproxy#configure-fiddler-as-reverse-proxy
1) Нажмите Инструменты> Скрипчик Параметры. Убедитесь, что установлен флажок Разрешить удаленным клиентам подключаться.
2) Создайте новый DWORD с именем ReverseProxyForPort внутри HKEY_CURRENT_USER\SOFTWARE\Microsoft\Fiddler2.
3) Установите DWORD на локальный порт, на который Fiddler будет перенаправлять входящий трафик.
4) Перезапустите Fiddler.

Во-вторых, измените клиента для вызова службы через прокси,
например, вот мой клиент app.config:

      <client>
    <endpoint address="http://localhost:61236/WeatherForecastService.svc"
        binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IWeatherForecastService"
        contract="ServiceReference1.IWeatherForecastService" name="BasicHttpBinding_IWeatherForecastService" />
</client>

измените клиента на использование адреса конечной точки прокси.

      WeatherForecastServiceClient client = new WeatherForecastServiceClient("BasicHttpBinding_IWeatherForecastService", "http://localhost:8888/WeatherForecastService.svc");
var data = client.GetData(1000);
client.Close();

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

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

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

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

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

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

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

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

Другие вопросы по тегам