Domanda

Sto cercando di registrare i messaggi al mio servizio WCF a livello di trasporto. Ho seguito alcune istruzioni che ho trovato in rete con successo, ma ora voglio implementare il mio ascoltatore di traccia che supporta la nostra soluzione di registrazione interna.

Ho implementato un ascoltatore di traccia e lo configura usando il app.config del mio servizio Windows che ospita il servizio WCF. Di seguito è riportato l'XML che utilizzo per configurare la registrazione.

<system.diagnostics>
  <sources>
    <source name="System.ServiceModel.MessageLogging">
      <listeners>
        <add name="messages" type="my.namespace.AdvancedLogTraceListener, Tools.Logging, Version=2.0.3.1, Culture=neutral" initializeData="C:\Logs" />
      </listeners>
    </source>
  </sources>
</system.diagnostics>

...

<diagnostics>
  <messageLogging logEntireMessage="true" logMalformedMessages="false" logMessagesAtServiceLevel="false" logMessagesAtTransportLevel="true">
  </messageLogging>
</diagnostics>

Tutto questo funziona abbastanza bene. Tuttavia: la nostra soluzione di registrazione interna viene utilizzata come una classe. Questa classe avvia un thread di sfondo per eseguire azioni come la pulizia del log, eseguire la registrazione effettiva in modo asincrono, ecc. La classe richiede un metodo chiamato Close da chiamare quando si chiude l'applicazione, che interrompe l'elaborazione interna ed esce dal thread.

Il TraceListener classe, che mio TraceListener eredita da, implementa a Close metodo. Ho sovrascritto questo metodo come segue:

public override void Close()
{
   base.Close();
   this.logFile.Close();
}

Solo che non funziona. Il Close metodo del TraceListener non sembra essere chiamato. Cosa dovrei fare per assicurarmi di poter chiamare il mio Close Metodo quando l'applicazione che ospita il servizio WCF è chiusa?

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top