2 Stimmen

Wie kann ich meine eigenen Nachrichten an die WCF-Trace-Datei senden?

So habe ich meine WCF-Dienst im Moment läuft selbst gehostet auf einer Konsole app, aber ich habe auch sie auf IIS. Die Sache ist die, dass ich gerade lerne, die Service Trace Viewer Werkzeug und natürlich möchte ich jetzt noch ein wenig weiter gehen und meine eigenen Nachrichten schreiben, die ich in die Trace-Dateien aufnehmen kann.

Ich dachte, es sollte einfach sein, aber Trace.TraceInformation schreibt nichts in die Trace-Datei.

Was übersehe ich?

So sieht meine Konfiguration aus:

<configuration>
 <system.diagnostics>
  <sources>
   <source name="System.ServiceModel.MessageLogging" switchValue="Warning, ActivityTracing">
    <listeners>
     <add type="System.Diagnostics.DefaultTraceListener" name="Default">
      <filter type="" />
     </add>
    </listeners>
   </source>
   <source name="System.ServiceModel" switchValue="Verbose,ActivityTracing"
    propagateActivity="true">
    <listeners>
     <add type="System.Diagnostics.DefaultTraceListener" name="Default">
      <filter type="" />
     </add>
     <add name="ServiceModelTraceListener">
      <filter type="" />
     </add>
    </listeners>
   </source>
  </sources>
  <sharedListeners>
   <add initializeData="C:\_sebastian\dev\gomez\WCFTraceTest\Server\App_tracelog.svclog"
    type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
    name="ServiceModelTraceListener" traceOutputOptions="Timestamp">
    <filter type="" />
   </add>
  </sharedListeners>
 </system.diagnostics>
 <system.serviceModel>
  <diagnostics>
   <messageLogging logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true"/>
  </diagnostics>

0voto

steinar Punkte 9140

Wie Sie sehen können aquí müssen Sie Flush für den Trace aufrufen, um ihn an die Listener zu leeren (oder AutoFlush einschalten). Haben Sie das getan?

0voto

Steve Ellinger Punkte 3957

Fügen Sie der Konfigurationsdatei Ihre eigene Quelle hinzu:

   <source name="MyNameSpace.MySource" switchValue="Verbose,ActivityTracing"
    propagateActivity="true">
    <listeners>
     <add type="System.Diagnostics.DefaultTraceListener" name="Default">
      <filter type="" />
     </add>
     <add name="ServiceModelTraceListener">
      <filter type="" />
     </add>
    </listeners>
   </source>

Dies ist nicht unbedingt notwendig, aber wenn Sie den SvcTraceViewer verwenden, ist es hilfreich, WCF-Traces von Ihren eigenen Traces trennen zu können. Als nächstes erstellen Sie in jeder Klasse, von der aus Sie Traces erstellen möchten, eine Instanz von TraceSource:

class SomeClass{
  TraceSource _traceSource = new TraceSource("MyNamespace.MySource");

  void SomeMethod(){
    // Anywhere you want to trace you can call the TraceInformation(String) method:
    _traceSource.TraceInformation("My trace message");
  }
}

Sie können Flush jedes Mal aufrufen, wenn Sie tracken, aber ich würde es nicht empfehlen. Die Klassen sind so optimiert, dass sie den Codefluss so wenig wie möglich stören, was bedeutet, dass ein Trace möglicherweise nicht sofort in der Datei erscheint, da das eigentliche Schreiben in die Datei in einem anderen Thread stattfindet. Sie könnten Flush jedoch während des Herunterfahrens Ihrer Anwendung aufrufen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X