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!
Antworten
Zu viele Anzeigen?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 ).
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.