2008-08-28 6 views
4

Dans cette question la réponse était de retourner sur un commutateur qui est ramassé par le débogueur désactivant l'en-tête étranger qui causait le problème. L'aide de Microsoft implique que ces commutateurs sont générés par l'utilisateur et ne répertorie aucun commutateur.Comment trouvez-vous les commutateurs de débogage disponibles? Ou donné un commutateur savoir ce qui est désactivé?

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

Ce que je voudrais savoir est où la valeur « Remote.Disable » vient et comment savoir ce que les autres choses peuvent être activés ou désactivés. Actuellement, c'est juste de la magie de config, et je n'aime pas la magie.

Répondre

2

Comme vous le suspectiez, Remote.Disable empêche l'application de joindre des informations de débogage aux demandes 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-là 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 est probablement appelé à partir System.Web.Services.Protocols.RemoteDebugger.IsClientCallOutEnabled(), qui est appelé par System.Web.Services.Protocols.WebClientProtocol.NotifyClientCallOut qui est à son tour étant appelée par la méthode d'invocation de System.Web.Services.Protocols.SoapHttpClientProtocol

Malheureusement

, à ma connaissance, peu de décompiler le cadre & seaching pour

new BooleanSwitch 

ou l'un des autres héritiers de la System.Diagnostics.Switch classe, il n'y a pas moyen facile de savoir ce que les commutateurs sont défini. Il semble être un cas de recherche msdn/google/débordement de pile pour le cas spécifique

Dans ce cas, je viens d'utiliser réflecteur & recherché pour la chaîne Remote.Disable

1

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

+0

Salut, ce que les assemblées avez-vous besoin d'avoir ouvert pour les trouver? Avec l'ensemble par défaut ouvert dans le réflecteur je ne trouve aucune correspondance ... – rohancragg

+0

TraceSwitch est dans System.Diagnostics (System.dll) qui devrait être dans le jeu par défaut pour Reflector. –