Как вы находите, какие отладочные переключатели доступны?Или, получив переключатель, выяснить, что отключается?

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

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

Что я хотел бы знать, так это откуда взялось значение "Удаленный.Отключить" и как узнать, какие еще вещи можно включить или выключить.В настоящее время это просто какая-то конфигурационная магия, а я не люблю магию.

Это было полезно?

Решение

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

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

Этот конкретный определен в System.ComponentModel.CompModSwitches.Отключить проверку ошибок:

public static BooleanSwitch DisableRemoteDebugging
{
    get
    {
        if (disableRemoteDebugging == null)
        {
            disableRemoteDebugging = new BooleanSwitch("Remote.Disable", "Disable remote debugging for web methods.");
        }
        return disableRemoteDebugging;
    }
}

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

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

new BooleanSwitch

или любой другой наследник Система.Диагностика.Переключатель класс, нет простого способа узнать, какие переключатели определены.Похоже, что это случай поиска msdn / google / stack overflow для конкретного случая

В этом случае я просто использовал Reflector и искал пульт дистанционного управления.Отключить строку

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top