Comment trouver les commutateurs de débogage disponibles ?Ou, avec un commutateur, découvrez ce qui est désactivé ?

StackOverflow https://stackoverflow.com/questions/33334

  •  09-06-2019
  •  | 
  •  

Question

Dans ce question la réponse était d'activer un commutateur qui est détecté par le débogueur, désactivant l'en-tête superflu à l'origine du problème.L'aide de Microsoft implique que ces commutateurs sont générés par l'utilisateur et ne répertorie aucun commutateur.

<configuration>
  <system.diagnostics>
    <switches>
      <add name="Remote.Disable" value="1" />
    </switches>
  </system.diagnostics>
</configuration> 

Ce que j'aimerais savoir, c'est d'où vient la valeur "Remote.Disable" et comment savoir quelles autres choses peuvent être activées ou désactivées.Actuellement, ce n'est qu'un peu de magie de configuration, et je n'aime pas la magie.

Était-ce utile?

La solution

Comme vous le soupçonniez, Remote.Disable empêche l'application de joindre des informations de débogage aux requêtes distantes.Il est défini dans les méthodes du framework .NET qui effectuent la requête SOAP.

La situation de base est que ces commutateurs peuvent être définis n'importe où dans le code, il vous suffit de créer un nouveau System.Diagnostics.BooleanSwitch avec le nom donné et le fichier de configuration peut les contrôler.

Celui-ci est défini dans System.ComponentModel.CompModSwitches.DisableRemoteDebugging :

public static BooleanSwitch DisableRemoteDebugging
{
    get
    {
        if (disableRemoteDebugging == null)
        {
            disableRemoteDebugging = new BooleanSwitch("Remote.Disable", "Disable remote debugging for web methods.");
        }
        return disableRemoteDebugging;
    }
}

Dans votre cas, il s'agit probablement d'un appel de System.Web.Services.Protocols.RemoteDebugger.IsClientCallOutEnabled(), qui est appelé par System.Web.Services.Protocols.WebClientProtocol.NotifyClientCallOut qui est à son tour appelé par la méthode Invoke de System.Web.Services.Protocols.SoapHttpClientProtocol

Malheureusement, à ma connaissance, à moins de décompiler le framework et de rechercher

new BooleanSwitch

ou l'un des autres héritiers du Système.Diagnostics.Switch classe, il n'y a pas de moyen facile de savoir quelles commutateurs sont définis.Il semble qu'il s'agisse d'une recherche msdn/google/stack overflow pour le cas spécifique

Dans ce cas, je viens d'utiliser Reflector et j'ai recherché la chaîne Remote.Disable

Autres conseils

Vous pouvez utiliser Reflector pour rechercher des utilisations de la classe Switch et de ses sous-classes (BooleanSwitch, TraceSwitch, etc.).Les différents commutateurs sont codés en dur par nom, donc AFAIK il n'y a pas de liste principale quelque part.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top