Jak używać programu Fiddler do monitorowania usługi WCF

107

Mam usługę WCF, która akceptuje typ złożony i zwraca niektóre dane. Chcę użyć programu Fiddler, aby zobaczyć, jak wyglądają żądania przychodzące do usługi. Klient jest aplikacją konsoli .net, która używa serwera proxy odwołania do usługi. Czy to możliwe w przypadku Fiddlera. Jestem nowy w tym narzędziu i używałem go w przeszłości tylko do publikowania danych za pomocą narzędzia do tworzenia żądań.

Quadwwchs
źródło
4
Usługi śledzenia WCF są same w sobie całkiem dobre, w tym ładny graficzny interfejs użytkownika do ich przeglądania. msdn.microsoft.com/en-us/library/ms751526.aspx
kenny

Odpowiedzi:

148

Musisz to dodać do swojego pliku web.config

<system.net>
  <defaultProxy>
    <proxy bypassonlocal="False" usesystemdefault="True" proxyaddress="http://127.0.0.1:8888" />
  </defaultProxy>
</system.net>
  1. następnie uruchom Fiddlera na maszynie WEBSERVER.
  2. Kliknij Narzędzia | Fiddler Options => Connections => ustaw port na 8888. (zezwól na sterowanie zdalne, jeśli tego potrzebujesz)
  3. Ok, następnie z menu plików przechwyć ruch.

To wszystko, ale nie zapomnij usunąć linii web.config po zamknięciu skrzypka, ponieważ jeśli tego nie zrobisz, spowoduje to błąd.

Źródła: http://fiddler2.com/documentation/Configure-Fiddler/Tasks/UseFiddlerAsReverseProxy

Tarek El-Mallah
źródło
1
Dzięki, to też mi pomogło. Mój błąd polegał na tym, że nie http://podałem adresu proxy. Cała reszta była taka sama, jak wspomniałeś.
Johnny_D,
1
To nie zadziałało. Moja sytuacja jest taka: serwer to IIS7.5, klient to aplikacja konsoli.W mojej aplikacji konsoli wywołałem metodę WebService, która jest wdrożona w IIS7.5 na moim komputerze deweloperskim. Zastąpienie „localhost” nazwa mojego komputera zadziałała dla mnie.
york,
5
Dzięki, u mnie zadziałało. Nawiasem mówiąc, w moim przypadku próbowałem przechwytywać ruch klienta WCF na hoście lokalnym , więc oprócz dodania ustawień, potrzebna była również zmiana adresu URL z http://localhost/abc.svcnahttp://HOSTNAME/abc.svc
cateyes
1
Z jakiegoś powodu nie działa dla mnie (używam usługi internetowej .svc). Ostatecznie moim obejściem było użycie catchera dla okien
ren
2
Niesamowite! Sugestia @cateyes zrobiła to za mnie
Alexander Derck
9

Fiddler nasłuchuje żądań wychodzących, a nie żądań przychodzących, więc nie będziesz w stanie monitorować wszystkich żądań przychodzących do usługi za pomocą programu Fiddler.

Najlepsze, co uzyskasz dzięki Fiddler, to możliwość wyświetlenia wszystkich żądań generowanych przez aplikację konsolową (zakładając, że aplikacja generuje żądania internetowe, a nie korzysta z innego potoku).

Jeśli potrzebujesz narzędzia, które jest potężniejsze (ale trudniejsze w użyciu), które pozwoli ci monitorować WSZYSTKIE przychodzące żądania, powinieneś sprawdzić WireShark.

Edytować

Poprawiono mnie. Podziękowania dla Erica Law za opublikowanie wskazówek dotyczących konfiguracji programu Fiddler jako odwrotnego proxy !

Justin Niessner
źródło
Dzięki za informację. Muszę wyświetlić strukturę żądania podobną do strony opisu usług asmx. Wydaje się, że program WCF nie ma tej opcji.
Quadwwchs,
9
To nie jest całkiem dokładne (a „moc” jest subiektywna, ponieważ WireShark nie może zmienić ruchu). Więcej informacji na temat nasłuchiwania ruchu przychodzącego można znaleźć na stronie fiddler2.com/fiddler/help/reverseproxy.asp .
EricLaw,
Eric - proponuję, abyś to stwierdził w oddzielnej odpowiedzi.
Cheeso
9

Właśnie miałem ten problem, co zadziałało dla mnie, to użycie localhost.fiddler:

 <endpoint address="http://localhost.fiddler/test/test.svc"
            binding="basicHttpBinding" 
            bindingConfiguration="customBinding" 
            contract="test" 
            name="customBinding"/>
L-Four
źródło
6

Konsolidacja zastrzeżeń wymienionych w komentarzach / odpowiedziach dla kilku przypadków użycia.

Przede wszystkim patrz http://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/ConfigureDotNETApp

  • Uruchom aplikację Fiddler przed aplikacją
  • W aplikacji konsolowej może nie być konieczne określanie proxyaddress:

    <proxy bypassonlocal="False" usesystemdefault="True" />
  • W aplikacji internetowej / czymś hostowanym w usługach IIS należy dodać proxyaddress:

    <proxy bypassonlocal="False" usesystemdefault="True" proxyaddress="http://127.0.0.1:8888" />
  • Kiedy .NET wysyła żądanie (przez klienta usługi lub HttpWebRequestitp.), Zawsze omija serwer proxy Fiddler dla adresów URL zawierających localhost, więc musisz użyć aliasu, takiego jak nazwa komputera, lub wymyślić coś w pliku `` hosty '' (dlatego coś takiego localhost.fiddlerlub http://HOSTNAMEdziała)
  • Jeśli określisz proxyaddress, musisz usunąć go ze swojej konfiguracji, jeśli Fiddler nie jest włączony, lub wszelkie żądania, które wysyła Twoja aplikacja, będą zgłaszać wyjątek, taki jak:

    Nie można było nawiązać połączenia, ponieważ maszyna docelowa aktywnie odmówiła mu 127.0.0.1:8888

  • Nie zapomnij użyć transformacji konfiguracji, aby usunąć sekcję proxy w środowisku produkcyjnym
drzaus
źródło
4

Tak proste, wszystko, czego potrzebujesz, to zmienić adres w kliencie konfiguracyjnym: zamiast `` localhost '' zmień nazwę komputera lub IP

Ziv.Ti
źródło
1

Jest to proste, jeśli masz kontrolę nad klientem, który wysyła wiadomości. Wszystko, co musisz zrobić, to ustawić HttpProxy w klasie usług po stronie klienta.

Zrobiłem to na przykład, aby prześledzić klienta usługi sieciowej działającego na smartfonie. Ustawiłem serwer proxy na tym połączeniu po stronie klienta na adres IP / port programu Fiddler, który był uruchomiony na komputerze w sieci. Aplikacja na smartfony wysyłała następnie całą swoją komunikację wychodzącą do usługi internetowej za pośrednictwem programu Fiddler.

To działało doskonale.

Jeśli Twój klient jest klientem WCF, zobacz te pytania i odpowiedzi, aby dowiedzieć się, jak ustawić serwer proxy.

Nawet jeśli nie masz możliwości modyfikowania kodu aplikacji po stronie klienta, możesz mieć możliwość administracyjnego ustawienia serwera proxy, w zależności od stosu usług sieciowych używanych przez klienta.

Ser
źródło
1

Standardowe śledzenie / diagnostyka WCF

Jeśli z jakiegoś powodu nie możesz uruchomić programu Fiddler lub wolisz rejestrować żądania w inny sposób, inną opcją jest użycie standardowej funkcji śledzenia WCF. Stworzy to plik z ładną przeglądarką.

Dokumenty

Zobacz https://docs.microsoft.com/en-us/dotnet/framework/wcf/samples/tracing-and-message-logging

Konfiguracja

Dodaj następujące elementy do swojej konfiguracji, upewnij się, że c:\logsistnieje, odbuduj i wyślij żądania:

  <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>
Seth Flowers
źródło
0

Użyłem narzędzia Wire Shark do monitorowania wezwań serwisowych z aplikacji Silver Light w przeglądarce do serwisu. spróbuj link daje jasne informacje

Umożliwia monitorowanie całej zawartości zapytań i odpowiedzi.

DiAgo
źródło
0

Właśnie wypróbowałem pierwszą odpowiedź od Brada Rema i doszedłem do tego ustawienia w web.config w BasicHttpBinding:

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

Mam nadzieję, że to komuś pomoże.

Remko Roodselaar
źródło
0

Możesz użyć bezpłatnej wersji debugera HTTP.

To nie jest serwer proxy i nie musisz dokonywać żadnych zmian w pliku web.config.

Może również wyświetlać oba; przychodzące i wychodzące żądania HTTP. Darmowy debuger HTTP

Khachatur
źródło