4

この質問での答えは、問題の原因となっている無関係なヘッダーを無効にするデバッガーによって検出されたスイッチをオンにすることでした。Microsoftのヘルプは、これらのスイッチがユーザー生成であり、スイッチをリストしていないことを示しています。

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

私が知りたいのは、「Remote.Disable」という値がどこから来ているのか、そして他にどのようにオンまたはオフに切り替えることができるかを見つける方法です。現在、それは単なる設定の魔法であり、私は魔法が好きではありません。

4

2 に答える 2

2

ご想像のとおり、Remote.Disable はアプリがデバッグ情報をリモート リクエストに添付するのを防ぎます。これは、SOAP 要求を行う .NET フレームワーク メソッド内で定義されます。

基本的な状況では、これらのスイッチはコードのどこにでも定義できます。指定された名前で新しい 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.NotifyClientCallOutによって呼び出されており、 Systemの Invoke メソッドによって呼び出されています。 .Web.Services.Protocols.SoapHttpClientProtocol

残念ながら、私の知る限り、フレームワークを逆コンパイルして検索することはできません

new BooleanSwitch

またはSystem.Diagnostics.Switchクラスの他の継承者のいずれかである場合、どのスイッチが定義されているかを知る簡単な方法はありません。特定のケースについてmsdn/google/stack overflowを検索するケースのようです

この場合、Reflector を使用し、Remote.Disable 文字列を検索しました。

于 2008-08-28T23:57:57.460 に答える
1

Reflector を使用して、Switch クラスとそのサブクラス (BooleanSwitch、TraceSwitch など) の使用を検索できます。さまざまなスイッチは名前でハードコーディングされているため、私の知る限り、マスターリストはどこにもありません。

于 2008-08-28T23:53:10.967 に答える