Comment utiliser Fiddler pour surveiller le service WCF

107

J'ai un service WCF qui accepte un type complexe et renvoie des données. Je veux utiliser Fiddler pour voir à quoi ressemblent les demandes entrantes au service. Le client est une application de console .net qui utilise un proxy de référence de service. Est-ce possible avec Fiddler. Je suis nouveau dans cet outil et je ne l'ai utilisé que par le passé pour publier des données avec le générateur de demandes.

Quadwwchs
la source
4
Les services de traçage WCF sont assez bons en eux-mêmes, y compris une belle interface graphique pour les visualiser. msdn.microsoft.com/en-us/library/ms751526.aspx
kenny

Réponses:

148

Vous devez l'ajouter dans votre web.config

<system.net>
  <defaultProxy>
    <proxy bypassonlocal="False" usesystemdefault="True" proxyaddress="http://127.0.0.1:8888" />
  </defaultProxy>
</system.net>
  1. puis Démarrez Fiddler sur la machine WEBSERVER.
  2. Cliquez sur Outils | Options Fiddler => Connexions => ajustez le port comme 8888. (autorisez la télécommande si vous en avez besoin)
  3. Ok, puis à partir du menu fichier, capturez le trafic.

C'est tout, mais n'oubliez pas de supprimer les lignes web.config après avoir fermé le fiddler, car si vous ne le faites pas, cela fera une erreur.

Référence: http://fiddler2.com/documentation/Configure-Fiddler/Tasks/UseFiddlerAsReverseProxy

Tarek El-Mallah
la source
1
Merci, cela m'a vraiment aidé aussi. Mon erreur a été de ne pas spécifier l' http://adresse proxy. Tout le reste était le même, comme vous l'avez mentionné.
Johnny_D
1
Cela n'a pas fonctionné pour moi.Ma situation est la suivante: le serveur est IIS7.5, le client est une application console.Dans mon application console, j'ai appelé une méthode WebService qui est déployée sur IIS7.5 sur mon ordinateur de développement.Remplacer "localhost" par mon nom d'ordinateur a fonctionné pour moi.
york
5
Merci, cela a fonctionné pour moi. À propos, dans mon cas, j'ai essayé de capturer le trafic client WCF sur localhost , donc en plus d'ajouter vos paramètres, il fallait également changer l'URL de http://localhost/abc.svctohttp://HOSTNAME/abc.svc
cateyes
1
Pour une raison quelconque, cela n'a pas fonctionné pour moi (j'utilise le service Web .svc). Finalement, ma solution de contournement était d'utiliser Catcher pour Windows
ren
2
Impressionnant! La suggestion de @cateyes l'a fait pour moi
Alexander Derck
9

Fiddler écoute les demandes sortantes plutôt que les demandes entrantes, vous ne pourrez donc pas surveiller toutes les demandes entrant dans votre service à l'aide de Fiddler.

Le mieux que vous obtiendrez avec Fiddler est la possibilité de voir toutes les requêtes telles qu'elles sont générées par votre application console (en supposant que l'application génère des requêtes Web plutôt que d'utiliser un autre pipeline).

Si vous voulez un outil plus puissant (mais plus difficile à utiliser) qui vous permettra de surveiller TOUTES les demandes entrantes, vous devriez consulter WireShark.

Éditer

Je me suis trompé. Merci à Eric Law d'avoir publié les instructions pour configurer Fiddler en tant que proxy inverse !

Justin Niessner
la source
Merci pour l'info. J'ai besoin de voir la structure de la demande similaire à la page de description des services asmx. WCF ne semble pas avoir cette option.
Quadwwchs
9
Ce n'est pas tout à fait exact (et la «puissance» est subjective, puisque WireShark ne peut pas modifier le trafic). Consultez fiddler2.com/fiddler/help/reverseproxy.asp pour plus de détails sur la façon d'écouter le trafic entrant.
EricLaw
Eric - Je vous suggère de dire cela dans une réponse autonome.
Cheeso
9

J'ai juste eu ce problème, ce qui a fonctionné pour moi était d'utiliser localhost.fiddler:

 <endpoint address="http://localhost.fiddler/test/test.svc"
            binding="basicHttpBinding" 
            bindingConfiguration="customBinding" 
            contract="test" 
            name="customBinding"/>
L-quatre
la source
6

Consolider les mises en garde mentionnées dans les commentaires / réponses pour plusieurs cas d'utilisation.

Surtout, voir http://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/ConfigureDotNETApp

  • Démarrez Fiddler avant votre application
  • Dans une application console, vous n'aurez peut-être pas besoin de spécifier proxyaddress:

    <proxy bypassonlocal="False" usesystemdefault="True" />
  • Dans une application Web / quelque chose hébergé dans IIS, vous devez ajouter proxyaddress:

    <proxy bypassonlocal="False" usesystemdefault="True" proxyaddress="http://127.0.0.1:8888" />
  • Lorsque .NET fait une demande (via un client de service ou HttpWebRequest, etc.), il contournera toujours le proxy Fiddler pour les URL contenant localhost, vous devez donc utiliser un alias comme le nom de la machine ou créer quelque chose dans votre fichier 'hosts' (c'est pourquoi quelque chose comme localhost.fiddlerou http://HOSTNAMEfonctionne)
  • Si vous spécifiez le proxyaddress, vous devez le supprimer de votre configuration si Fiddler n'est pas activé, ou toute requête effectuée par votre application lèvera une exception comme:

    Aucune connexion n'a pu être établie car la machine cible l'a activement refusée 127.0.0.1:8888

  • N'oubliez pas d'utiliser les transformations de configuration pour supprimer la section proxy en production
drzaus
la source
4

Si simple, tout ce dont vous avez besoin est de changer l'adresse dans le client de configuration: au lieu de 'localhost', changez le nom de la machine ou l'adresse IP

Ziv.Ti
la source
1

C'est simple si vous contrôlez le client qui envoie les communications. Tout ce que vous avez à faire est de définir HttpProxy sur la classe de service côté client.

Je l'ai fait, par exemple, pour tracer un client de service Web fonctionnant sur un smartphone. J'ai défini le proxy de cette connexion côté client sur l'IP / le port de Fiddler, qui fonctionnait sur un PC sur le réseau. L'application pour smartphone a ensuite envoyé toutes ses communications sortantes au service Web, via Fiddler.

Cela a parfaitement fonctionné.

Si votre client est un client WCF, consultez ces questions et réponses pour savoir comment définir le proxy.

Même si vous ne pouvez pas modifier le code de l'application côté client, vous pourrez peut-être définir le proxy de manière administrative, en fonction de la pile de services Web utilisée par votre client.

Cheeso
la source
1

Suivi / diagnostics WCF standard

Si, pour une raison quelconque, vous ne parvenez pas à faire fonctionner Fiddler ou si vous préférez consigner les demandes d'une autre manière, une autre option consiste à utiliser la fonctionnalité de traçage WCF standard. Cela produira un fichier qui a une belle visionneuse.

Docs

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

Configuration

Ajoutez ce qui suit à votre configuration, assurez-vous qu'il c:\logsexiste, reconstruisez et faites des requêtes:

  <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>
Fleurs de Seth
la source
0

J'ai utilisé l'outil Wire Shark pour surveiller les appels de service de l'application Silver Light dans le navigateur au service. essayez le lien donne des informations claires

Il vous permet de surveiller l'ensemble du contenu de la demande et de la réponse.

DiAgo
la source
0

Je viens d'essayer la première réponse de Brad Rem et suis arrivé à ce paramètre dans le web.config sous BasicHttpBinding:

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

J'espère que cela aide quelqu'un.

Remko Roodselaar
la source
0

Vous pouvez utiliser la version gratuite de HTTP Debugger.

Ce n'est pas un proxy et vous n'avez pas besoin d'apporter de modifications dans web.config.

En outre, il peut afficher les deux; requêtes HTTP entrantes et sortantes. Débogueur HTTP gratuit

Khachatur
la source