10 March 2014 Tracing, WCF Robert Muehsig

Die Windows Communication Foundation ist ein ziemliche magische Blackbox mit dutzenden Einstellungsmöglichkeiten. Im Regelfall würde ich für einfache Server/Client Kommunikationen auf HTTP REST APIs setzen, anstatt die Büchse der Pandora zu öffnen, aber das ist nur meine persönliche Meinung.
Fall jemand aber Fehler oder seltsames Verhalten in WCF aufdecken möchte, der sollte sich das WCF Tracing näher anschauen. Grundsätzlich enthält das WCF Trace ziemlich viele Daten, welche mit einem eigenen Logviewer (im Windows SDK enthalten) anschauen kann.

Die Konfiguration und weitere Erklärungen stammen von dieser Seite. Da ich in der letzten Zeit häufig danach gesucht hatte, kommt es jetzt auch auf diesen Blog.

Die gesamte Kommunikation mitschneiden:

   1: <configuration>
   2:  
   3:  <system.diagnostics>
   4:   <sources>
   5:     <source name="System.ServiceModel" switchValue="Information, ActivityTracing"
   6:             propagateActivity="true" >
   7:       <listeners>
   8:         <add name="xml"/>
   9:       </listeners>
  10:     </source>
  11:     <source name="System.ServiceModel.MessageLogging">
  12:       <listeners>
  13:         <add name="xml"/>
  14:       </listeners>
  15:     </source>
  16:     <source name="myUserTraceSource" switchValue="Information, ActivityTracing">
  17:       <listeners>
  18:         <add name="xml"/>
  19:       </listeners>
  20:     </source>
  21:   </sources>
  22:   <sharedListeners>
  23:     <add name="xml"
  24:          type="System.Diagnostics.XmlWriterTraceListener"
  25:                initializeData="Traces.svclog" />
  26:   </sharedListeners>
  27:  </system.diagnostics>
  28:  
  29:  <system.serviceModel>
  30:   <diagnostics wmiProviderEnabled="true">
  31:       <messageLogging 
  32:            logEntireMessage="true" 
  33:            logMalformedMessages="true"
  34:            logMessagesAtServiceLevel="true" 
  35:            logMessagesAtTransportLevel="true"
  36:            maxMessagesToLog="3000" 
  37:        />
  38:   </diagnostics>
  39:  </system.serviceModel>
  40: </configuration>

Für Produktivumgebunden:

Hier werden nur Warnungen und Fehler geloggt, ansonsten ist die Konfiguration identisch.

   1: <configuration>
   2:  
   3:  <system.diagnostics>
   4:   <sources>
   5:     <source name="System.ServiceModel" switchValue="Warning"
   6:             propagateActivity="true" >
   7:       <listeners>
   8:         <add name="xml"/>
   9:       </listeners>
  10:     </source>
  11:     <source name="myUserTraceSource"
  12:             switchValue="Warning, ActivityTracing">
  13:       <listeners>
  14:         <add name="xml"/>
  15:       </listeners>
  16:     </source>
  17:   </sources>
  18:   <sharedListeners>
  19:     <add name="xml"
  20:          type="System.Diagnostics.XmlWriterTraceListener"
  21:                initializeData="Traces.svclog" />
  22:   </sharedListeners>
  23:  </system.diagnostics>
  24:  
  25: <system.serviceModel>
  26:   <diagnostics wmiProviderEnabled="true">
  27:   </diagnostics>
  28:  </system.serviceModel>
  29: </configuration>

Written by Robert Muehsig

Software Developer - from Dresden, Germany, now living & working in Switzerland. Microsoft MVP & Web Geek.
Other Projects: KnowYourStack.com | ExpensiveMeeting | EinKofferVollerReisen.de

If you like the content and want to support me you could buy me a beer or a coffee via Litecoin or Bitcoin - thanks for reading!