Mon code utilise beaucoup d'appels WCF et lorsque j'essaie de le déboguer, il ne passe pas au code de service lui-même. Existe-t-il un moyen de déboguer le code WCF?
Vous devez associer le débogueur au processus dans lequel votre service wcf est exécuté.
Si vous êtes dans iis, vous devez vous connecter au processus w3p.exe correspondant.
Si vous êtes dans une application autonome ou un service Windows, associez-le au nom de votre exe.
Dans Visual Studio, dans le menu du débogueur, il y a une "attacher au processus". Ouvrez le code approprié, définissez un point d'arrêt et appelez le service à l'origine de l'exécution de ce chemin de code.
En dehors du débogage, l’utilisation du traçage .net avec des niveaux commutables est un bon moyen de mieux comprendre ce qui se passe. En général, je configure debugview de sys internals de manière à mettre en évidence les erreurs et les avertissements et à le faire fonctionner en permanence lors de l'exécution de code ou de tests. Les lignes colorées de ma vision périphérique tout en travaillant trouve des problèmes.
Il y a un moyen beaucoup plus facile. Il suffit de démarrer plusieurs processus dans Visual Studio. Cliquez avec le bouton droit sur la solution. Cliquez sur Propriétés. Sélectionnez Projet de démarrage. Cliquez sur Plusieurs projets de démarrage. Définissez les projets WCF et client sur Action = Start. Maintenant, vous allez parcourir la WCF ainsi que le client.
Si vous souhaitez suivre l'activité de la fonction WCF pour savoir si le trafic est généré dans le bon ordre, je vous recommande l'une des approches suivantes:
1) Utilisez fiddler pour regarder le trafic WCF.
2) Utilisez l'écouteur de trace WCF pour surveiller les appels WCF réels. Ceci est extrêmement utile lorsque vous essayez de déterminer les causes d'un échec de la sérialisation. Vous pouvez l'activer en ajoutant le bloc suivant à votre bloc de configuration web.config:
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="traceListener"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="c:\log\WebTrace.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
Un double-clic sur le fichier généré ouvrira la visionneuse du journal de service WCF, qui analysera le fichier pour vous et vous permettra d'explorer des appels spécifiques et de voir les exceptions réelles.
Pour déboguer un service WCF dans Visual Studio 2010, accédez à Débogage -> Attacher au processus. Cochez "Afficher les processus de tous les utilisateurs" et choisissez w3p.exe si vous utilisez IIS ou le nom de l'application si ce n'est pas le cas. Mettez un point d'arrêt, passez l'appel et vous pourrez alors commencer le débogage.
S'il s'agit d'une application Web (je le recommande), vous pouvez cliquer avec le bouton droit de la souris sur le projet, aller à l'onglet Web et sous Démarrer action, choisir "Ne pas ouvrir une page, attendre une demande d'une application externe". Enregistrez et fermez ce paramètre, puis appuyez simplement sur F5 pour lancer le débogage.
Attachez le service lui-même, pas le code qui l'appelle.
Lors de l'exécution d'une application qui accède aux services WCF, deux processus sont souvent impliqués
On dirait que vous déboguez le processus client. Pour parcourir le code de service WCF actuel, vous devez associer le débogueur Visual Studio au processus hébergeant le service et définir un point d'arrêt dans le code.
Remarque: Visual Studio peut se connecter simultanément à plusieurs processus afin que vous puissiez déboguer le code de votre client et celui de votre serveur au cours de la même session. Utilisation
Dans mon cas, j’ai défini le site WCF en tant que StartUp Project
dans Visual Studio et j’ai directement exécuté le WCF en mode débogage,
l'élément WCF dans l'Explorateur de solutions Visual Studio ressemble à ceci:
après le démarrage de la WCF, une nouvelle page Web s'affichera dans le navigateur. Son adresse URL ressemblera à http://xxxx:xxport/Service.svc
, copiera cet uri et l'utilisera dans un autre programme qui appelle cette fonction,
puis définissez le point d'arrêt à la méthode appelée par le programme. Le point d'arrêt sera entré avec succès lors de l'exécution du programme.