Я пытаюсь записывать сообщения в службу WCF на транспортном уровне.Я успешно выполнил некоторые инструкции, которые нашел в сети, но теперь я хочу реализовать свой собственный прослушиватель трассировки, который поддерживает наше собственное решение для ведения журналов.
Я реализовал прослушиватель трассировки и настраиваю его с помощьюapp.config
моей службы Windows, на которой размещается служба WCF.Ниже приведен XML-код, который я использую для настройки ведения журнала.
<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>
Все это работает довольно хорошо.Тем не менее: наше собственное решение для каротажа используется как класс.Этот класс запускает фоновый поток для выполнения таких действий, как очистка журнала, асинхронное ведение журнала и т. Д. Класс требует метод с именем Close
, вызываемый при закрытии приложения, что останавливает внутреннюю обработкуи выходит из потока.
Класс TraceListener
, от которого наследуется мой TraceListener
, реализует метод Close
.Я переопределил этот метод следующим образом:
public override void Close()
{
base.Close();
this.logFile.Close();
}
Только то, что он не работает.Close
метод TraceListener
, похоже, не вызывается.Что я должен сделать, чтобы обеспечить возможность вызова метода Close
, когда приложение, в котором размещена служба WCF, закрыто?