Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Calling System.Diagnostics.Trace from a Dynamics CRM 2011 Plugin

Wondering if any of you have any ideas about the following issue I’m running into.

Here is some super simple plug-in code.

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

I’m using DebugView (http://goo.gl/YRfus) to view the Trace messages being written. When I execute this code as a plug-in running in the sandbox I get the results I expect: three lines appear in DebugView and if I attach VS to the Sandbox worker process I see three lines written to the Output window. Now when I change the isolation mode to none, and let it run in the W3WP.EXE process I do not get any output to DebugView and when I attach to W3WP.EXE I can set a breakpoint to validate it is running but I do not get any output to the Output window.

Any idea of why this is occurring and how I can go about overriding the cause and force the non-sandbox execution to work as expected. I can take some guesses about it having to do with running inside of the CRM IIS processes and that CRM is suppressing the Trace writing – I specifically used Trace instead of Debug in attempt to avoid the issue, but no luck.

I know I can use the ITracingService but that does not meet my current requirement.

like image 933
Nicknow Avatar asked Jan 06 '13 15:01

Nicknow


1 Answers

(A guess) Add this to your config file. If it worked then your problem is that the .NET trace has some problem with it's default listener when it's on another app domain.

Change D:\Log\MyApp\Program to a path that ASP.NET has full access to.

...
<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>
...
like image 148
Kaveh Shahbazian Avatar answered Nov 10 '22 10:11

Kaveh Shahbazian