2013-01-06 8 views
7

Fragen, wenn einer von Ihnen irgendwelche Ideen über das folgende Problem habe, das ich renne.Aufruf von System.Diagnostics.Trace von einem Dynamics CRM 2011-Plugin

Hier ist ein paar sehr einfache 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");     
     } 
    } 
} 

Ich bin mit Debugview (http://goo.gl/YRfus), um die Trace-Nachrichten anzuzeigen geschrieben werden. Wenn ich diesen Code als ein Plug-in ausführe, das in der Sandbox läuft, bekomme ich die erwarteten Ergebnisse: drei Zeilen erscheinen in DebugView und wenn ich VS an den Sandbox-Worker-Prozess anschließe, sehe ich drei Zeilen in das Ausgabefenster geschrieben. Wenn ich jetzt den Isolationsmodus auf none ändere und ihn im W3WP.EXE-Prozess laufen lasse, bekomme ich keine Ausgabe an DebugView, und wenn ich an W3WP.EXE anhefte, kann ich einen Haltepunkt setzen, um zu bestätigen, dass er läuft, aber ich nicht Ausgabe in das Ausgabefenster bringen

Jede Idee, warum dies auftritt und wie kann ich über die Ursache übergehen und erzwingen, dass die Ausführung nicht Sandbox wie erwartet funktioniert. Ich kann ein paar Vermutungen darüber machen, dass es innerhalb der CRM-IIS-Prozesse läuft und dass CRM das Trace-Schreiben unterdrückt - ich habe speziell Trace anstelle von Debug verwendet, um das Problem zu vermeiden, aber kein Glück.

Ich weiß, dass ich den ITracingService verwenden kann, aber das entspricht nicht meiner aktuellen Anforderung.

+0

On-Premise oder online? Nicht sicher, ob es wichtig ist, aber es ist gut zu wissen. –

+0

On-Premises synchron. On-line kann nur in der Sandbox ausgeführt werden und Trace funktioniert in der Sandbox einwandfrei. – Nicknow

+0

Ich habe Jack ... Entschuldigung. Ich hatte eine Chance, aber mir wurde klar, dass es nicht so ist. –

Antwort

2

(Ein Tipp) Fügen Sie das zu Ihrer Konfigurationsdatei hinzu. Wenn es funktionierte, ist Ihr Problem, dass die .NET-Ablaufverfolgung ein Problem mit ihrem Standard-Listener hat, wenn sie sich in einer anderen Anwendungsdomäne befindet.

Ändern Sie D:\Log\MyApp\Program in einen Pfad, auf den ASP.NET vollen Zugriff hat.

... 
<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> 
...