Como você descobre quais opções de depuração estão disponíveis?Ou, com um interruptor, descubra o que está sendo desativado?

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

  •  09-06-2019
  •  | 
  •  

Pergunta

Nisso pergunta a resposta foi ativar uma chave que é selecionada pelo depurador, desativando o cabeçalho estranho que estava causando o problema.A ajuda da Microsoft implica que essas opções são geradas pelo usuário e não lista nenhuma opção.

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

O que eu gostaria de saber é de onde vem o valor "Remote.Disable" e como descobrir quais outras coisas podem ser ativadas ou desativadas.Atualmente é apenas uma mágica de configuração, e eu não gosto de mágica.

Foi útil?

Solução

Como você suspeitava, Remote.Disable impede que o aplicativo anexe informações de depuração a solicitações remotas.É definido dentro dos métodos do .NET Framework que fazem a solicitação SOAP.

A situação básica é que essas opções podem ser definidas em qualquer lugar do código, basta criar um novo System.Diagnostics.BooleanSwitch com o nome fornecido e o arquivo de configuração pode controlá-las.

Este em particular é definido em 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;
    }
}

No seu caso, provavelmente está sendo chamado de System.Web.Services.Protocols.RemoteDebugger.IsClientCallOutEnabled(), que está sendo chamado por System.Web.Services.Protocols.WebClientProtocol.NotifyClientCallOut que por sua vez está sendo chamado pelo método Invoke de System.Web.Services.Protocols.SoapHttpClientProtocol

Infelizmente, que eu saiba, antes de descompilar a estrutura e procurar por

new BooleanSwitch

ou qualquer outro herdeiro do Sistema.Diagnóstico.Switch Classe, não há maneira fácil de saber quais interruptores são definidos.Parece ser o caso de pesquisar msdn/google/stack overflow para o caso específico

Neste caso, usei apenas o Reflector e procurei a string Remote.Disable

Outras dicas

Você pode usar o Reflector para procurar usos da classe Switch e suas subclasses (BooleanSwitch, TraceSwitch, etc).Os vários switches são codificados por nome, então AFAIK não há lista mestre em algum lugar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top