请求建议:如何将WCF Web服务请求信息记录到数据库

时间:2013-11-16 05:07:24

标签: c# wcf

我是编写.NET Web服务的新手。我发现自己正在编写一个包含大约20个Web服务的.NET WCF应用程序。我想记录以下事件:

  1. 请求(有效负载 - 谁和什么)
  2. 响应(查询是否有效,是否返回数据)
  3. 错误(有某种错误)
  4. 我编写了一个简单的函数,在每个点执行SQL插入。每个Web服务请求至少有两个插入 - 一个在请求中,另一个在响应中。 10个以上方法中的每一个都需要至少4个这些日志记录调用。我书中的维护太多了。

    我认为这种做法太难而且繁琐 - 我需要做大量的工作来维护它。我过去曾使用过Axis2的LOG4J(我没有配置),它能够在Web服务器上记录以上所有内容。需要抛出异常,但请求/响应日志记录是自动处理的。我不太了解.NET,觉得我对我的选择有很好的处理。

    此时我正在考虑使用Log4net或企业库语义记录应用程序块。我有更好的选择吗?关于哪个课程对于相对新手来说最简单的任何建议?

    谢谢, 马特

2 个答案:

答案 0 :(得分:4)

您的问题的解决方案需要分为两部分:

  1. 如何轻松捕获每个操作合同的请求/响应? (即没有在每种方法的开头/结尾添加特殊代码)?
  2. 如何有效地将数据加载到数据库中?
  3. For 1:您可以创建一个消息检查器并将其注册为服务行为。这意味着您将拥有一个单个点来拦截所有请求和响应 - 允许您在一个位置处理它们。 This article解释了如何编写和部署此类检查器。这很容易。

    对于2:log4net和ENtLiB绝对是主要候选者。

    选择的一些注意事项:

    • 就日志记录功能而言,对于大多数情况,它们都同样强大。
    • log4net的API在我看来更友好
    • EntLib是一个很大(但很好的因素)库。但它确实带有更多的log4not依赖。如果您不打算使用除日志记录之外的其他模块,则可能是一种过度杀伤

    无论您的选择如何,都需要考虑性能因素。您没有提到您期望的请求数量,但是大量的请求记录每个请求都会影响性能。 有各种策略可以解决这个问题,但这是在您分析应用程序之后的故事。

答案 1 :(得分:0)

如果您只是在寻找事务审计日志记录(可能是为了支持开发,调试和早期实现阶段),那么您可能需要考虑使用WCF跟踪和消息日志记录功能。 WCF跟踪功能提供了一种相对简单的内置方法来监视与WCF服务之间的通信。对于测试和调试环境,请配置信息或详细活动跟踪并启用消息日志记录。在最初部署和测试新服务或向现有服务添加新操作和/或通信绑定时,活动跟踪和消息记录的组合应该证明是有益的。如果您担心维护,那么您可以设置跟踪日志以使用设置大小,然后“重新循环”文件空间。

以下链接提供了一个很好的概述:
http://msdn.microsoft.com/en-us/library/ms733025.aspx
http://msdn.microsoft.com/en-us/library/aa702726.aspx