Как использовать 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>
- затем запустите Fiddler на машине WEBSERVER.
- Нажмите Инструменты | Параметры Fiddler => Подключения => настроить порт как 8888.(разрешить удаленный, если вам это нужно)
- Хорошо, тогда из меню файлов захватить трафик.
Вот и все, но не забудьте удалить строки 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-адрес в конечной точке конфигурации.
- Щелкните правой кнопкой мыши файл конфигурации
- Нажмите Edit with Svc Config Editor.
- Щелкните Конечные точки и измените конечную точку на localhost.fiddler.
- Установите флажок Запускать новый прокси при вызове метода
Стандартный 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-отладчик бесплатно