2008-08-28 49 views
4

在這個question答案是翻轉一個由調試器拾取的開關,禁用導致問題的無關頭。 Microsoft幫助暗示這些切換是由用戶生成的,並未列出任何交換機。你如何找到可用的調試開關?或者給一個開關找出什麼被禁用?

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

我想知道的是價值「Remote.Disable」的來源和如何找出什麼其他的事情可以開啓或關閉。目前它只是一些配置魔術,而我不喜歡魔術。

回答

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.Web.Services.Protocols.SoapHttpClientProtocol的Invoke方法稱爲被叫

不幸的是,據我所知,短反編譯seaching爲

new BooleanSwitch 

或任何System.Diagnostics.Switch類的其他繼承人的框架&的, 有沒有簡單的方法來知道交換機是什麼定義。這似乎是搜索MSDN /谷歌/堆棧溢出的具體情況

在這種情況下,我只是用反射&搜索的字符串Remote.Disable

1

您可以使用Reflector來搜索Switch類及其子類(BooleanSwitch,TraceSwitch等)的使用。各種交換機按名稱硬編碼,所以AFAIK沒有主列表。

+0

喜的情況下,什麼組件你需要有開放找到這些?在反射器中打開默認設置,我找不到任何匹配... – rohancragg 2009-10-28 10:05:10

相關問題