.net - example - c# app config file
¿Cómo se encuentran los interruptores de depuración disponibles? ¿O si se le da un interruptor, averigüe qué se está deshabilitando? (2)
En esta pregunta, la respuesta fue activar un interruptor que el depurador recogió desactivando el encabezado extraño que causaba el problema. La ayuda de Microsoft implica que estos conmutadores son generados por el usuario y no enumera ningún conmutador.
<configuration>
<system.diagnostics>
<switches>
<add name="Remote.Disable" value="1" />
</switches>
</system.diagnostics>
</configuration>
Lo que me gustaría saber es de dónde viene el valor "Remote.Disable" y cómo saber qué otras cosas se pueden activar o desactivar. Actualmente es solo una magia de configuración, y no me gusta la magia.
Puede usar Reflector para buscar usos de la clase Switch y sus subclases (BooleanSwitch, TraceSwitch, etc.). Los diversos interruptores están codificados por nombre, por lo que AFAIK no hay una lista maestra en alguna parte.
Como sospechaba, Remote.Disable evita que la aplicación adjunte información de depuración a las solicitudes remotas. Se define dentro de los métodos de framework .NET que hacen la solicitud SOAP.
La situación básica es que estos switches se pueden definir en cualquier parte del código, solo necesita crear un nuevo System.Diagnostics.BooleanSwitch con el nombre dado y el archivo de configuración puede controlarlos.
Este en particular se define en 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;
}
}
En su caso, probablemente se llame desde System.Web.Services.Protocols.RemoteDebugger.IsClientCallOutEnabled () , que está siendo llamado por System.Web.Services.Protocols.WebClientProtocol.NotifyClientCallOut, que a su vez se llama mediante el método Invoke del sistema. .Web.Services.Protocols.SoapHttpClientProtocol
Lamentablemente, que yo sepa, a falta de descompilar el marco y la búsqueda de
new BooleanSwitch
o cualquiera de los otros herederos de la clase System.Diagnostics.Switch , no hay una manera fácil de saber qué switches están definidos. Parece ser un caso de búsqueda de msdn / google / para el caso específico
En este caso, acabo de utilizar Reflector y busqué la cadena Remote.Disable