2013-01-06 229 views
7

想知道您是否有任何關於以下問題的想法。從Dynamics CRM 2011插件調用System.Diagnostics.Trace

這是一些超級簡單的插件代碼。

namespace Demo.DebugTraceBlog 
{ 
    public class TraceAndDebugDemo : IPlugin 
    { 
     public void Execute(IServiceProvider serviceProvider) 
     { 
      Trace.WriteLine("Started Plugin");  
      Trace.WriteLine("Plugin Working");  
      Trace.WriteLine("Ending Plugin");     
     } 
    } 
} 

我使用DebugView(http://goo.gl/YRfus)查看正在寫入的跟蹤消息。當我將這段代碼作爲沙盒中運行的插件執行時,我得到了我期望的結果:DebugView中出現三行,如果將VS附加到Sandbox工作進程,則會看到三行寫入輸出窗口。現在,當我將隔離模式更改爲無,並讓它在W3WP.EXE過程中運行時,我沒有得到任何輸出到DebugView,並且當我附加到W3WP.EXE時,我可以設置一個斷點來驗證它正在運行,但是我不得到任何輸出到輸出窗口。

任何想法爲什麼會發生這種情況,以及我如何能夠覆蓋原因並強制非沙箱執行按預期工作。我可以猜想它與運行在CRM IIS流程內部有關,並且CRM正在抑制跟蹤編寫 - 我專門使用了Trace而不是Debug來試圖避免這個問題,但沒有運氣。

我知道我可以使用ITracingService,但那不符合我目前的要求。

+0

內部部署還是在線?不知道它是否重要,但很好知道。 –

+0

本地同步。在線只能在沙箱中運行,並且沙盒中的跟蹤工作得很好。 – Nicknow

+0

我得到了傑克...對不起。我有一杆,但我意識到那不是。 –

回答

2

(猜測)將此添加到您的配置文件。如果它的工作,那麼你的問題是,當它在另一個應用程序域上時,它的默認偵聽器的.NET跟蹤有一些問題。

D:\Log\MyApp\Program更改爲ASP.NET有權訪問的路徑。

... 
<system.diagnostics> 
<switches> 
... 
</switches> 
<sources> 
... 
</sources> 
<trace autoflush="true"> 
    <listeners> 
    <clear /> 
    <add name="defaultListener" type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" 
     initializeData="FileLogWriter" 
     Append="true" 
     AutoFlush="true" 
     BaseFileName="program" 
     CustomLocation="D:\Log\MyApp\Program" 
     DiskSpaceExhaustedBehavior="DiscardMessages" 
     Encoding="Unicode" 
     IncludeHostName="false" 
     LogFileCreationSchedule="Daily" 
     location="Custom" 
     MaxFileSize="900000000000" /> 
    <add name="programConsoleListener" type="System.Diagnostics.ConsoleTraceListener" /> 
    </listeners> 
</trace> 
</system.diagnostics> 
...