¿Cómo puedo saber qué conmutadores de depuración están disponibles?¿O, dado un interruptor, descubrir qué se está desactivando?

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

  •  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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top