Как узнать, какие переключатели доступны? Или с помощью переключателя выяснить, что отключено? - PullRequest
4 голосов
/ 29 августа 2008

В этом вопросе ответ состоял в том, чтобы щелкнуть переключателем, обнаруженным отладчиком, отключив посторонний заголовок, который вызывал проблему. Справка Microsoft подразумевает, что эти переключатели создаются пользователем и не содержат никаких переключателей.

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

Я хотел бы знать, откуда берется значение «Remote.Disable» и как узнать, какие другие вещи можно включить или выключить. В настоящее время это просто волшебство конфигурации, и я не люблю магию.

Ответы [ 2 ]

2 голосов
/ 29 августа 2008

Как вы и подозревали, Remote.Disable останавливает приложение от прикрепления отладочной информации к удаленным запросам. Он определен внутри методов .NET Framework, которые делают запрос SOAP.

Основная ситуация заключается в том, что эти ключи могут быть определены в любом месте кода, вам просто нужно создать новый переключатель System.Diagnostics.BooleanSwitch с указанным именем, и файл конфигурации может управлять ими.

Этот конкретный определен в 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;
    }
}

В вашем случае он, вероятно, вызывается из System.Web.Services.Protocols.RemoteDebugger.IsClientCallOutEnabled () , который вызывается System.Web.Services.Protocols.WebClientProtocol.NotifyClientCallO , который в свою очередь вызывается методом Invoke System.Web.Services.Protocols.SoapHttpClientProtocol

К сожалению, насколько мне известно, кроме декомпиляции фреймворка и поиска для

new BooleanSwitch

или любой другой наследник класса System.Diagnostics.Switch , Нет простого способа узнать, какие переключатели определены. Кажется, это случай поиска переполнения msdn / google / stack для конкретного случая

В этом случае я просто использовал Reflector и искал строку Remote.Disable

1 голос
/ 29 августа 2008

Вы можете использовать Reflector для поиска использования класса Switch и его подкласса (BooleanSwitch, TraceSwitch и т. Д.). Различные переключатели жестко закодированы по имени, так что AFAIK где-то нет списка мастеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...