¿Cómo puedo saber qué conmutadores de depuración están disponibles?¿O, dado un interruptor, descubrir qué se está desactivando?
-
09-06-2019 - |
Pregunta
En esto pregunta la respuesta fue activar un interruptor que el depurador detecta y desactiva el encabezado extraño que estaba causando el problema.La ayuda de Microsoft implica que estos cambios son generados por el usuario y no enumera ningún cambio.
<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 sólo algo de magia de configuración y no me gusta la magia.
Solución
Como sospechaba, Remote.Disable impide que la aplicación adjunte información de depuración a solicitudes remotas.Se define dentro de los métodos del marco .NET que realizan la solicitud SOAP.
La situación básica es que estos modificadores 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 está definido 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 lo estén llamando desde System.Web.Services.Protocols.RemoteDebugger.IsClientCallOutEnabled(), que está siendo llamado por System.Web.Services.Protocols.WebClientProtocol.NotifyClientCallOut que a su vez está siendo llamado por el método Invoke de System.Web.Services.Protocols.SoapHttpClientProtocol
Desafortunadamente, que yo sepa, salvo descompilar el marco y buscar
new BooleanSwitch
o cualquiera de los demás herederos del Interruptor.de.diagnóstico.del.sistema clase No hay una manera fácil de saber qué interruptores están definidos.Parece ser un caso de buscar en msdn/google/stack overflow para el caso específico
En este caso solo usé Reflector y busqué la cadena Remote.Disable
Otros consejos
Puede utilizar Reflector para buscar usos de la clase Switch y sus subclases (BooleanSwitch, TraceSwitch, etc.).Los distintos conmutadores están codificados por nombre, por lo que AFAIK no hay una lista maestra en ninguna parte.