2013-01-06 52 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> 
...