Partager via


traçage analytique [WCF]

L’exemple WCFAnalyticTracingExtensibility sample montre comment ajouter vos propres événements de traçage au flux des traces analytiques que WCF (Windows Communication Foundation) écrit dans le suivi d’événements pour Windows dans le .NET Framework. Les traces analytiques permettent d'obtenir facilement une visibilité de vos services sans que cela se traduise par une lourde pénalité en termes de performances. Cet exemple montre comment utiliser les API System.Diagnostics.Eventing pour écrire des événements qui s’intègrent aux services WCF.

Pour plus d’informations sur les API System.Diagnostics.Eventing, consultez System.Diagnostics.Eventing.

Pour en savoir plus sur le suivi d’événements pour Windows, consultez Améliorer le débogage et l’optimisation des performances avec ETW.

Suppression d'EventProvider

Cet exemple utilise la classe System.Diagnostics.Eventing.EventProvider, qui implémente System.IDisposable. Lors de l’implémentation du traçage pour un service WCF, il est probable que vous utilisiez les ressources de EventProvider pour la durée de vie du service. Pour cette raison, et à des fins de lisibilité, cet exemple ne supprime jamais l'EventProvider inclus dans un wrapper. Si pour une raison ou une autre, les exigences de votre service diffèrent en matière de suivi et que vous devez supprimer cette ressource, modifiez cet exemple conformément aux meilleures pratiques de suppression de ressources non managées. Pour plus d’informations sur la suppression des ressources non managées, consultez Implémenter une méthode Dispose.

Auto-hébergement et hébergement Web

Pour les services hébergés sur le web, les traces analytiques de WCF fournissent un champ, nommé « HostReference », utilisé pour identifier le service qui émet les traces. Les traces utilisateur extensibles peuvent participer à ce modèle et cet exemple en illustre les meilleures pratiques. Une référence d’hôte web lorsque le caractère « | » apparaît réellement dans la chaîne obtenue peut se présenter sous l’une des formes suivantes :

  • Si l'application ne se situe pas à la racine.

    <nom_site><chemin_virtuel_application>|<chemin_virtuel_service>|<nom_service>

  • Si l'application se situe à la racine.

    <nom_site>|<chemin_virtuel_service>|<nom_service>

Pour les services auto-hébergés, les traces analytiques de WCF ne remplissent pas le champ « HostReference ». La classe WCFUserEventProvider de cet exemple se comporte de manière cohérente lorsqu'elle est utilisée par un service auto-hébergé.

Informations sur l'événement personnalisé

Le manifeste du fournisseur d’événements ETW de WCF définit trois événements conçus par les auteurs du service WCF pour être émis à partir du code du service. Le tableau suivant détaille ces trois événements.

Événement Description ID de l’événement
UserDefinedInformationEventOccurred Émettez cet événement lorsqu'un fait remarquable, qui n'est pas un problème, se produit dans votre service. Par exemple, vous pouvez émettre un événement après qu'un appel à une base de données a abouti. 301
UserDefinedWarningOccurred Émettez cet événement lorsqu'un problème susceptible d'aboutir à un échec se produit. Par exemple, vous pouvez émettre un événement d'avertissement lorsqu'un appel à une base de données a échoué, mais que vous avez pu recourir à une banque de données redondante. 302
UserDefinedErrorOccurred Émettez cet événement lorsque votre service ne se comporte pas comme prévu. Par exemple, vous pouvez émettre un événement si un appel à une base de données a échoué et que vous n'avez pas pu récupérer les données ailleurs. 303

Pour utiliser cet exemple

  1. À l’aide de Visual Studio, ouvrez le fichier solution WCFAnalyticTracingExtensibility.sln.

  2. Pour générer la solution, appuyez sur Ctrl+Maj+B.

  3. Pour exécuter la solution, appuyez sur Ctrl+F5.

    Dans le navigateur web, cliquez sur Calculator.svc. L'URI du document WSDL du service doit s'afficher dans le navigateur. Copiez cet URI.

  4. Exécutez le client test WCF (WcfTestClient.exe).

    Le client test WCF (WcfTestClient.exe) se trouve à \<Visual Studio Install Dir>\Common7\IDE\WcfTestClient.exe.

  5. Dans le client test WCF, ajoutez le service en sélectionnant Fichier, puis Ajouter un service.

    Ajoutez l'adresse du point de terminaison dans la zone d'entrée.

  6. Cliquez sur OK pour fermer la boîte de dialogue.

    Le service ICalculator est ajouté dans le volet gauche sous Mes projets de service.

  7. Ouvrez l'application Observateur d'événements.

    Avant d’appeler le service, démarrez l’Observateur d’événements et vérifiez que le journal des événements écoute les événements de suivi émis à partir du service WCF.

  8. Dans le menu Démarrer, sélectionnez Outils d’administration, puis Observateur d’événements. Activez les journaux d’analyse et de débogage.

  9. Dans l’arborescence de l’Observateur d’événements, naviguez vers Observateur d’événements, Journaux des applications et des services, Microsoft, Windows, puis Serveur d’applications-Applications. Cliquez avec le bouton droit sur Serveur d’applications-Applications, sélectionnez Afficher, puis Afficher les journaux d’analyse et de débogage.

    Vérifiez que l’option Afficher les journaux d’analyse et de débogage est activée. Activez le journal Analyse.

    Dans l’arborescence de l’Observateur d’événements, naviguez vers Observateur d’événements, Journaux des applications et des services, Microsoft, Windows, Serveur d’applications-Applications, puis Analyse. Cliquez avec le bouton droit sur Analyse, puis sélectionnez Activer le journal.

  10. Testez le service à l'aide du client test WCF.

    1. Dans le client test WCF, double-cliquez sur Add() sous le nœud du service ICalculator.

      La méthode Add() s’affiche dans le volet droit avec deux paramètres.

    2. Tapez 2 pour le premier paramètre et 3 pour le deuxième.

    3. Cliquez sur Appeler pour appeler la méthode.

  11. Accédez à la fenêtre Observateurs d’événements que vous avez déjà ouverte. Naviguez vers Observateur d’événements, Journaux des applications et des services, Microsoft, Windows et Serveur d’applications-Applications.

  12. Cliquez avec le bouton droit sur le nœud Analyse et sélectionnez Actualiser.

    Les événements s'affichent dans le volet droit.

  13. Trouvez l'événement avec l'ID 303 et double-cliquez dessus pour l'ouvrir et en inspecter le contenu.

    Cet événement a été émis par la méthode Add() du service ICalculator et a une charge utile égale à « 2+3=5 ».

Pour nettoyer (facultatif)

  1. Ouvrez l’ Observateur d’événements.

  2. Naviguez vers Observateur d’événements, Journaux des applications et des services, Microsoft, Windows, puis Serveur d’applications-Applications. Cliquez avec le bouton droit sur Analyse et sélectionnez Désactiver le journal.

  3. Naviguez vers Observateur d’événements, Journaux des applications et des services, Microsoft, Windows, Serveur d’applications-Applications, puis Analyse. Cliquez avec le bouton droit sur Analyse et sélectionnez Effacer le journal.

  4. Cliquez sur Effacer pour effacer les événements.

Problème connu

Un problème connu de l’Observateur d’événements est qu’il lui arrive de ne pas parvenir à décoder des événements ETW. Le message d’erreur suivant peut alors s’afficher : « La description de l’ID d’événement <id> dans la source Microsoft-Windows-Serveur d’applications-Applications est introuvable. Le composant qui déclenche cet événement n’est pas installé sur votre ordinateur local, ou l’installation est endommagée. Vous pouvez installer ou réparer le composant sur l’ordinateur local ». Si vous rencontrez cette erreur, sélectionnez Actualiser dans le menu Actions. Le décodage de l'événement doit ensuite s'effectuer correctement.

Voir aussi