Comment utiliser Fiddler pour surveiller le service WCF
j'ai un service WCF qui accepte un type complexe et renvoie quelques données. Je veux utiliser Fiddler pour voir à quoi ressemblent les requêtes entrantes au service. Le client est l'application 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 dans le passé pour poster des données avec le constructeur de requêtes.
8 réponses
vous devez ajouter ceci dans votre web.config
<system.net>
<defaultProxy>
<proxy bypassonlocal="False" usesystemdefault="True" proxyaddress="http://127.0.0.1:8888" />
</defaultProxy>
</system.net>
- puis Démarrer Fiddler sur la machine WEBSERVER.
- , Cliquez sur Outils | Fiddler Options => Connexions => ajuster le port 8888.(distance, si vous avez besoin d')
- Ok, puis à partir du menu Fichier, capturez le trafic.
c'est tout, mais n'oubliez pas de supprimer le web.lignes de configuration après la fermeture du fiddler, parce que si vous ne pas il va faire une erreur.
référence: http://fiddler2.com/documentation/Configure-Fiddler/Tasks/UseFiddlerAsReverseProxy
Fiddler écoute les requêtes sortantes plutôt que les requêtes entrantes de sorte que vous n'allez pas être en mesure de surveiller toutes les requêtes entrant dans votre service en utilisant Fiddler.
le mieux que vous obtiendrez avec Fiddler est la possibilité de voir toutes les requêtes générées par votre application Console (en supposant que l'application génère des requêtes web plutôt qu'en utilisant un autre pipeline).
Si vous voulez un outil qui est plus puissant (mais plus difficile à utiliser) qui vous permettra de surveiller TOUTES les demandes entrantes, vous devriez vérifier WireShark.
Modifier
je corrige. Merci à Eric Law pour avoir posté les instructions pour configurer Fiddler pour être un mandataire inversé !
vient D'avoir 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"/>
Consolider les mises en garde mentionnées dans les commentaires/réponses pour plusieurs cas d'utilisation.
la Plupart du temps, voir http://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/ConfigureDotNETApp
- Démarrer Fiddler avant que votre application
-
dans une application de console, vous pourriez ne pas avoir à spécifier le
proxyaddress
:<proxy bypassonlocal="False" usesystemdefault="True" />
-
dans un web application / quelque chose hébergé dans IIS, vous devez ajouter le
proxyaddress
:<proxy bypassonlocal="False" usesystemdefault="True" proxyaddress="http://127.0.0.1:8888" />
- quand .NET fait une demande (par l'intermédiaire d'un client de service ou
HttpWebRequest
, etc), il court-circuite toujours le proxy Fiddler pour les URLs contenantlocalhost
, 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 commelocalhost.fiddler
ouhttp://HOSTNAME
fonctionne) -
si vous spécifiez
proxyaddress
, vous devez le supprimer de votre configuration si Fiddler n'est pas activé, ou toute requête faite par votre application fera une exception comme:aucune connexion n'a pu être faite parce que la machine cible a activement refusé it 127.0.0.1: 8888
- N'oubliez pas d'utiliser config transformations supprimer le proxy de la section de la production
si simple, tout ce dont vous avez besoin est de changer l'adresse dans le client de configuration: au lieu de "localhost" changer le nom de la machine ou L'IP
c'est simple si vous avez le contrôle sur le client qui envoie les communications. Tout ce que vous avez à faire est de configurer le HttpProxy sur la classe de service côté client.
j'ai fait ceci, par exemple, pour tracer un client de service web tournant sur un smartphone. J'ai placé le proxy sur cette connexion côté client à L'IP/port de Fiddler, qui fonctionnait sur un PC sur le réseau. L'application smartphone a ensuite envoyé toute sa communication sortante au service web, par Fiddler.
cela a fonctionné parfaitement.
si votre client est un client de la FMC, lisez cette Q&R pour savoir comment définir le mandataire.
même si vous n'avez pas la possibilité de modifier le code de l'application côté client, vous pouvez être en mesure de définir le proxy administrativement, en fonction de la pile de services web que votre client utilise.
Standard de la WCF de suivi/Diagnostics
si, pour une raison quelconque, vous n'êtes pas en mesure de faire fonctionner Fiddler, ou si vous préférez enregistrer les requêtes d'une autre manière, une autre option est d'utiliser la fonctionnalité standard de traçage WCF. Cela va produire un fichier qui a un téléspectateur agréable.
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 que c:\logs
existe, 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>