2009-12-17 10 views
8

我希望能够在数据库中记录消息信息,并且我正在尝试确定如何最好地执行此操作。有可能配置WCF日志机制写入数据库而不是文件?谢谢。如何启用WCF日志记录以便将其写入数据库?

+1

博客[配置WCF服务以利用企业库:记录应用程序以将数据记录到数据库](http://weblogs.asp.net/sukumarraju/archive/2011/11/07/configuring-wcf-service-to-利用企业库日志记录应用程序到日志数据到数据库.aspx)有分步说明,如何配置'数据库跟踪监听器' – 2012-09-26 12:32:41

回答

8

你需要有两件事情:

  • 适当配置,以使.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 - 或者你可以使用很多现成的解决方案之一,在那里,例如this one here(从Codeplex下载代码)。

0

如果你不需要整个SOAP消息,我会建议使用log4net自定义IParameterInspector或IDispatchMessageInspector实现,因为在这种情况下,你可以写入只记录你所需要的。 否则,采取marc_s的解决方案。

相关问题