Wie finden Sie heraus, welche Debug-Schalter verfügbar sind?Oder anhand eines Schalters herausfinden, was deaktiviert ist?

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

  •  09-06-2019
  •  | 
  •  

Frage

In diesem Frage Die Antwort bestand darin, einen Schalter umzulegen, der vom Debugger aktiviert wird und den überflüssigen Header deaktiviert, der das Problem verursacht hat.Die Microsoft-Hilfe geht davon aus, dass diese Schalter vom Benutzer generiert werden und listet keine Schalter auf.

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

Ich würde gerne wissen, woher der Wert „Remote.Disable“ kommt und wie ich herausfinden kann, welche anderen Dinge ein- oder ausgeschaltet werden können.Im Moment ist es nur ein bisschen Konfigurationsmagie, und ich mag keine Magie.

War es hilfreich?

Lösung

Wie Sie vermutet haben, verhindert Remote.Disable, dass die App Debug-Informationen an Remote-Anfragen anhängt.Es ist innerhalb der .NET Framework-Methoden definiert, die die SOAP-Anfrage stellen.

Die Grundsituation besteht darin, dass diese Schalter an einer beliebigen Stelle im Code definiert werden können. Sie müssen lediglich einen neuen System.Diagnostics.BooleanSwitch mit dem angegebenen Namen erstellen und die Konfigurationsdatei kann sie steuern.

Dieses spezielle ist in System.ComponentModel.CompModSwitches.DisableRemoteDebugging definiert:

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

In Ihrem Fall wird es wahrscheinlich von aus angerufen System.Web.Services.Protocols.RemoteDebugger.IsClientCallOutEnabled(), das aufgerufen wird von System.Web.Services.Protocols.WebClientProtocol.NotifyClientCallOut die wiederum von der Invoke-Methode von aufgerufen wird System.Web.Services.Protocols.SoapHttpClientProtocol

Leider ist es meines Wissens nicht möglich, das Framework zu dekompilieren und danach zu suchen

new BooleanSwitch

oder einer der anderen Erben der System.Diagnostics.Switch Klasse Es gibt keine einfache Möglichkeit zu wissen, welche Switches definiert sind.Es scheint sich um eine Suche nach einem msdn/google/stack-Überlauf für den konkreten Fall zu handeln

In diesem Fall habe ich einfach Reflector verwendet und nach der Zeichenfolge „Remote.Disable“ gesucht

Andere Tipps

Mit Reflector können Sie nach Verwendungsmöglichkeiten der Switch-Klasse und ihrer Unterklassen (BooleanSwitch, TraceSwitch usw.) suchen.Die verschiedenen Schalter sind namentlich fest codiert, daher gibt es AFAIK nirgendwo eine Masterliste.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top