2009-12-17 12 views
8

Mi piacerebbe essere in grado di registrare le informazioni dei messaggi in un database e sto cercando di decidere il modo migliore per farlo. È possibile configurare i meccanismi di registrazione WCF per scrivere su un database anziché su un file? Grazie.Come posso abilitare la registrazione WCF in modo che scriva su un database?

+1

Blog [Configurazione del servizio WCF per utilizzare la libreria aziendale: registrazione dell'applicazione per registrare i dati nel database] (http://weblogs.asp.net/sukumarraju/archive/2011/11/07/configuring-wcf-service-to- use-enterprise-library-logging-application-to-log-data-to-database.aspx) ha istruzioni passo-passo, come configurare 'Database Trace listener' –

risposta

8

È necessario disporre di due cose:

  • una corretta configurazione per abilitare .NET tracciare
  • un listener di analisi per catturare i messaggi di traccia e memorizzarli in un database

Per # 1:
E 'necessario attivare la traccia in WCF prima - è necessaria una voce nel <system.serviceModel> che consente il tracciamento:

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

successivo, è necessario configurare .NET tracciamento in quanto tale:

<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> 

Qui, invece di WebTraceListener o altri listener predefiniti, è inoltre possibile collegare il proprio listener di traccia orientato al database.

Per 2 #:
È possibile - naturalmente - scrivere il proprio SqlTraceListener - oppure è possibile utilizzare una delle tante soluzioni già pronte là fuori, per esempio this one here (scaricare il codice da Codeplex).

0

Se non è necessario l'intero messaggio SOAP, suggerirei di utilizzare log4net con l'implementazione personalizzata IParameterInspector o IDispatchMessageInspector, perché in questo caso è possibile scrivere per registrare solo ciò che è necessario. Altrimenti, prendi la soluzione di marc_s.

Problemi correlati