2009-12-17 9 views
8

Ich möchte in der Lage sein, Nachrichteninformationen in einer Datenbank zu protokollieren, und ich versuche zu entscheiden, wie das am besten funktioniert. Ist es möglich, die Protokollierungsmechanismen von WCF so zu konfigurieren, dass sie in eine Datenbank anstatt in eine Datei schreiben? Vielen Dank.Wie kann ich die WCF-Protokollierung aktivieren, sodass sie in eine Datenbank schreibt?

+1

Blog [Konfigurieren des WCF-Dienstes zur Verwendung der Enterprise Library: Protokollanwendung zum Protokollieren von Daten in der Datenbank] (http://weblogs.asp.net/sukumarraju/archive/2011/11/07/configuring-wcf-service-to- uses-enterprise-library-logging-application-to-log-data-to-database.aspx) enthält eine schrittweise Anleitung, wie man den 'Database Trace Listener' konfiguriert –

Antwort

8

Sie müssen zwei Dinge:

  • eine richtige Config .NET zu ermöglichen
  • eine Spur Zuhörer Verfolgung der Trace-Meldungen zu erfassen und speichern sie in einer Datenbank

Für # 1:
Zuerst müssen Sie die Ablaufverfolgung in WCF machen - Sie müssen einen Eintrag in <system.serviceModel> die Tracing 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 .NET-Tracing als solche 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 statt Wenn Sie WebTraceListener oder andere vordefinierte Listener verwenden, können Sie auch einen eigenen datenbankorientierten Trace Listener anschließen.

für 2 #:
Sie können - natürlich - Ihre eigene SqlTraceListener schreiben - oder Sie können dort eine der vielen vorgefertigten Lösungen nutzen, zum Beispiel this one here (Download Code Codeplex).

0

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

Verwandte Themen