8 Stimmen

Wie kann ich die WCF-Protokollierung so aktivieren, dass sie in eine Datenbank schreibt?

Ich möchte in der Lage sein, Nachrichteninformationen in einer Datenbank zu protokollieren, und ich versuche zu entscheiden, wie ich das am besten anstelle. Ist es möglich, die WCF-Protokollierungsmechanismen so zu konfigurieren, dass sie in eine Datenbank und nicht in eine Datei schreiben? Vielen Dank!

9voto

marc_s Punkte 701497

Sie müssen zwei Dinge haben:

  • eine geeignete Konfiguration zur Aktivierung der .NET-Ablaufverfolgung
  • einen Trace-Listener, der die Trace-Meldungen erfasst und in einer Datenbank speichert

Für #1 :
Sie müssen zuerst die Ablaufverfolgung in WCF einschalten - Sie benötigen einen Eintrag in <system.serviceModel> die die Rückverfolgung ermöglicht:

<system.serviceModel>
   <diagnostics>
      <messageLogging
          logEntireMessage="true"
          logMalformedMessages="false"
          logMessagesAtServiceLevel="true"
          logMessagesAtTransportLevel="false"
          maxMessagesToLog="300000"
          maxSizeOfMessageToLog="200000"/>
    </diagnostics>
</system.serviceModel>

Als nächstes müssen Sie das .NET-Tracing als solches konfigurieren:

<system.diagnostics>
   <sources>
      <source name="System.ServiceModel" 
              switchValue="Information, ActivityTracing" 
              propagateActivity="true">
         <listeners>
            <add name="xml" />
         </listeners>
      </source>
      <source name="System.ServiceModel.MessageLogging">
         <listeners>
             <add name="xml" />
         </listeners>
      </source>
   </sources>
   <sharedListeners>
       <add name="xml" type="WcfTrace.Trace.WebTraceListener,WcfTrace.Trace" />
   </sharedListeners>
</system.diagnostics>

Hier können Sie anstelle des WebTraceListeners oder anderer vordefinierter Listener auch Ihren eigenen datenbankorientierten Trace-Listener einfügen.

Für #2:
Sie können natürlich auch Ihre eigenen Texte schreiben SqlTraceListener - oder Sie können eine der vielen fertigen Lösungen verwenden, die es gibt, zum Beispiel dieses hier (Download des Codes von Codeplex ).

0voto

fspirit Punkte 2477

Wenn Sie nicht die gesamte SOAP-Nachricht benötigen, würde ich vorschlagen, log4net mit benutzerdefinierten IParameterInspector oder IDispatchMessageInspector-Implementierung, denn in diesem Fall können Sie nur das ins Protokoll schreiben, was Sie brauchen. Ansonsten nehmen Sie die Lösung von marc_s.

-1voto

CSharpAtl Punkte 7190

Sie können verwenden Log4Net

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