9
votes

Puis-je contrôler le traçage de la WCF programmatiquement?

J'ai récemment lu Conseils de Chris Love sur l'utilisation du traçage de la WCF pour vous aider à résoudre le dépannage .
Il allume la traçage en ajoutant de nouvelles sections de XML au fichier app.config et j'ai depuis vu Recommandations similaires ici pour la même technique .

Cependant, nous ne voulons pas vraiment expédier plusieurs fichiers app.config .
Et nous ne voulons vraiment pas que nos clients les modifierent sur des systèmes de production!

existe une façon de configurer les différents paramètres de la traçage de WCF dans l'app.config, mais le traçage est activé / désactivé du code?

Idéalement, j'aimerais que mon application vérifie le registre et activer uniquement le traçage lorsqu'une certaine valeur était présente.


1 commentaires

Stackoverflow.com/a/34283667/187650 Vous pouvez l'activer à l'aide de WMI, voir le lien.


3 Réponses :


2
votes

Voici un lien vers une question de faire quelque chose de similaire. Le gars qui a posé sa question semblait avoir un certain contrôle programmatique sur le traçage de la WCF, mais pas tous. Je ne le fais pas s'il l'avait jamais travaillé à sa satisfaction ou non.

Tracing WCF dans le code ne suit pas Paramètres Messagelogging

Peut-être que cela vous aidera peut-être pas.


0 commentaires

1
votes

La traçage de la WCF se branche dans les classes System.Diagnostics dans .NET pendant une longue période. Il y a une API pour tout ce qui est fait en XML. Par exemple Créer et initialiser les écouteurs de trace .

Pour la vue d'ensemble générale Faites défiler jusqu'au bas de la classe de trace documentation.


0 commentaires

11
votes

Ma suggestion est d'utiliser un TraceFilter que vous appliquez à tous les auditeurs attachés à la WCF Tracesources (c'est-à-dire "System.ServiceModel", "System.ServiceModel.MESSAGELOGGEGGGE"). À l'intérieur de la méthode CODEFILTER DE TRACEFILTER () , vous pouvez alors supprimer de manière conditionnelle la traçage en fonction des informations disponibles sur l'application.

Voici quelques échantillons de code que vous pouvez utiliser comme point de départ. Il existe une classe d'assistance statique qui détermine globalement et une fois au cours de la durée de vie d'une application si le suivi doit être activé ou désactivé: xxx

dans l'app.config vous configureriez le Tracefilter comme ceci: xxx

** **

Veuillez noter qu'un comportement similaire pourrait être obtenu en écrivant une personnalisation Interrupteur de trajet . La principale différence serait qu'une tracewitch est appliquée à une traceource et un tracefilter à un traceliste. Ce serait légèrement plus impliqué, cependant.


4 commentaires

Excellente réponse. Ceci est assez proche de ce dont j'ai besoin, mais pour une raison quelconque, le fichier journal semble toujours grandir même lorsque je définit _shouldtracewcf sur false.


Cela semble étrange. Pourriez-vous poster la section de votre app.config?


Le était comme vous le décrivez mais avec une deuxième entrée pour system.servicemodel.messagelogging écrire dans un fichier séparé. Et un section allumant la journalisation du message. Les deux utilisaient le même tracefilter - le messagelogging One éteint (le fichier a été créé mais resté 0 octets) mais le servicemodel était encore peuplé.


J'ai abandonné le travail à ce sujet pour l'instant et je viens de le rendre aussi simple que possible pour les clients / ingénieurs de terrain d'éditer l'app.config (à l'aide de Named entrées afin que tout ce qu'ils ont besoin de faire est Déterminez le entrée dans la section <. / code> section). Je vous récompense la prime comme vous avez eu le plus proche de la solution. Merci de votre aide.