Registrazione WCF: perché non viene chiamato il chiuso per il tracelistener?
-
31-10-2019 - |
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