Как включить ведение журнала WCF для записи в базу данных? - PullRequest
8 голосов
/ 17 декабря 2009

Я хотел бы иметь возможность регистрировать информацию о сообщениях в базе данных, и я пытаюсь решить, как лучше всего это сделать. Можно ли настроить механизмы ведения журналов WCF для записи в базу данных вместо файла? Спасибо.

Ответы [ 3 ]

9 голосов
/ 17 декабря 2009

Вам нужно иметь две вещи:

  • правильная конфигурация для включения трассировки .NET
  • прослушиватель трассировки для захвата сообщений трассировки и сохранения их в базе данных

Для # 1 :
Сначала вам нужно включить трассировку в WCF - вам нужна запись в <system.serviceModel>, которая включает трассировку:

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

Далее необходимо настроить трассировку .NET следующим образом:

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

Здесь вместо WebTraceListener или других предварительно определенных прослушивателей вы также можете подключить свой собственный прослушиватель трассировки, ориентированный на базу данных.

Для № 2:
Вы можете - конечно - написать свой SqlTraceListener - или вы можете использовать одно из множества готовых решений, например здесь (скачать код с Codeplex ).

0 голосов
/ 18 декабря 2009

Если вам не нужно полное SOAP-сообщение, я бы предложил использовать log4net с пользовательской IParameterInspector или реализацией IDispatchMessageInspector, потому что в этом случае вы можете писать в журнал только то, что вам нужно. В противном случае возьмите решение marc_s.

0 голосов
/ 17 декабря 2009

Вы можете использовать Log4Net

...