Як використовувати Fiddler для моніторингу послуги WCF


107

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


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 => Connections => налаштуйте порт як 8888. (дозвольте віддаленому, якщо вам це потрібно)
  3. Гаразд, тоді з меню файлів захопіть трафік.

Це все, але не забудьте видалити рядки web.config після закриття фідлера, адже якщо ви цього не зробите, ви помилитесь.

Довідка: http://fiddler2.com/documentation/Configure-Fiddler/Tasks/UseFiddlerAsReverseProxy


1
Дякую, що мені теж дуже допомогло. Моя помилка була не вказувати http://в проксі-адресі. Все решта було те саме, як ви згадали.
Johnny_D

1
Це не спрацювало для мене. Моя ситуація така: сервер IIS7.5, клієнт - консольний додаток. У своєму консольному додатку я назвав метод WebService, який розгорнуто на IIS7.5 на моєму комп'ютері розробки. Замінивши "localhost" на моє ім’я комп'ютера працювало на мене.
йорк

5
Дякую, це працювало на мене. До речі, в моєму випадку я намагався зафіксувати трафік клієнта WCF на localhost , тому крім додавання ваших налаштувань, йому також потрібно було змінити URL-адресу http://localhost/abc.svcнаhttp://HOSTNAME/abc.svc
cateyes

1
Чомусь для мене не вийшло (я використовую веб-сервіс .svc). В кінці кінців мій обхідний шлях , щоб використовувати уловлювач для вікон
Ren

2
Дивовижно! Пропозиція @cateyes зробила це для мене
Олександр Дерк

9

Fiddler слухає вихідні запити, а не вхідні запити, тому ви не зможете контролювати всі запити, що надходять до вашої служби, використовуючи Fiddler.

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

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

Редагувати

Я стою виправлений. Завдяки Еріку Лоу за те, що він розмістив вказівки щодо налаштування Fiddler як зворотного проксі !


Дякуємо за інформацію. Мені потрібно переглянути структуру запитів, подібну до сторінки опису для служб asmx. Схоже, WCF не має такої можливості.
Quadwwchs

9
Це не зовсім точно (і "потужність" суб'єктивна, оскільки WireShark не може змінити трафік). Див. Fiddler2.com/fiddler/help/reverseproxy.asp для отримання детальної інформації про прослуховування вхідного трафіку.
EricLaw

Ерік - Я пропоную вам заявити, що це окрема відповідь.
Cheeso

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, тому ви повинні використовувати псевдонім на зразок імені машини або щось складати у вашому файлі "господарів" (саме тому щось на кшталт 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

Я використовував інструмент дротяної акули для відстеження службових дзвінків від програми "срібло світла" в браузері до служби. спробуйте посилання дає чітку інформацію

Це дозволяє контролювати весь вміст запиту та відповіді.


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.

Це не проксі, і вам не потрібно вносити жодних змін у web.config.

Також він може показувати і те, і інше; вхідні та вихідні HTTP-запити. Відладчик HTTP безкоштовно

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.