2

I have a set of wcf services that interact with a sql server database and I want to add some auditing to it to find when the service was called and what it did.

I believe there are 2 options open to me.

a. add triggers to the database tables that log to another database on updates, inserts etc b. add an interceptor to my wcf services which log calls to Mongo big data storage database with necessary data to audit

What is the best practise in this area and any suggestions as to an approach to follow?

4

2 回答 2

1

一个老问题,但我一直在研究一个可能会帮助其他人的图书馆。

使用Audit.Wcf(Audit.NET 的扩展,您可以记录与 WCF 服务的交互,并且可以将其配置为使用Audit.MongoDB扩展将审核日志存储在 MongoDB 数据库中。

[AuditBehavior] // <-- enable the audit
public class YourService : IServiceContract
{
  public Order GetOrder(int orderId)
  {
    ...
  }
}
于 2016-09-13T15:33:20.757 回答
0

作为第一反应,我会尝试启用跟踪。您会惊讶于这些可以提供什么样的细节,尤其是在诊断方面。它也非常简单,不涉及任何重新编译:

<system.diagnostics>
    <trace autoflush="true" />
    <sources>
            <source name="System.ServiceModel" 
                    switchValue="Information, ActivityTracing"
                    propagateActivity="true">
            <listeners>
               <add name="sdt" 
                   type="System.Diagnostics.XmlWriterTraceListener" 
                   initializeData= "SdrConfigExample.e2e" />
            </listeners>
         </source>
    </sources>
</system.diagnostics>

如果您使用Verbose日志记录,您将获得几乎所有正在发生的事件的调试级日志记录。然后使用SvctraceViewer回去审核这些日志。

除此之外,请考虑使用Trace.*服务中的方法来提供您可能需要的任何其他详细级别(例如对数据库的调用)。根据您设置服务的方式,您可能还可以查看一个调试器,该调试器直接插入您的数据库上下文并在它进行调用时输出。

于 2013-07-28T00:23:35.010 回答