从Dynamics CRM 2011插件调用System.Diagnostics.Trace

Nic*_*now 7 c# asp.net iis-7 system.diagnostics dynamics-crm-2011

想知道你是否有任何关于我遇到的以下问题的想法.

这是一些超级简单的插件代码.

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

我正在使用DebugView(http://goo.gl/YRfus)来查看正在写入的跟踪消息.当我执行这个代码作为一个插件在沙箱中运行,我得到我预期的结果:三线出现在DebugView中,如果我附上VS沙盒工作进程我看到写入到输出窗口三行.现在,当我改变隔离模式无法比拟的,并且让它在W3WP.EXE过程来看,我没有得到任何输出到DebugView中,当我连接到我的w3wp.exe可以设置断点以验证它正在运行,但我不知道获取任何输出到输出窗口.

知道为什么会发生这种情况以及如何重写原因并强制非沙盒执行按预期工作的任何想法.我可以猜测它与运行CRM IIS进程内部有关,而CRM正在抑制Trace写入 - 我专门使用Trace而不是Debug来试图避免这个问题,但没有运气.

我知道我可以使用ITracingService,但这不符合我当前的要求.

Kav*_*ian 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>
...
Run Code Online (Sandbox Code Playgroud)