Ведение журнала WCF: почему Close не вызывается для TraceListener? - PullRequest
1 голос
/ 09 февраля 2011

Я пытаюсь записывать сообщения в службу 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, закрыто?

1 Ответ

0 голосов
/ 14 февраля 2011

Неверс, я нашел другое решение, реализующее инспекторы сообщений.

...