【问题标题】:Request Advice: How to Log WCF Web Service Request Info to a database请求建议:如何将 WCF Web 服务请求信息记录到数据库
【发布时间】:2013-11-16 05:07:23
【问题描述】:

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

  1. 请求(带有有效负载 - 谁和什么)
  2. 响应(查询是否有效,是否返回数据)
  3. 错误(是否存在某种错误)

我编写了一个简单的函数,在每个点执行一次 SQL 插入。每个 Web 服务请求至少获得两个插入 - 一个在请求中,另一个在响应中。 10 多个方法中的每一个都需要至少 4 个这样的日志记录调用。在我的书中进行了太多的维护。

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

此时我正在考虑使用 Log4net 或 Enterprise Library Semantic Logging Application Block。我有更好的选择吗?对于相对新手来说哪门课程可能最简单,有什么建议吗?

谢谢, 马特

【问题讨论】:

    标签: c# wcf


    【解决方案1】:

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

    1. 如何轻松捕获每个操作合同的请求/响应? (即在每个方法的开头/结尾不添加特殊代码)?
    2. 如何有效地将数据加载到数据库中?

    对于 1:您可以创建消息检查器并将其注册为服务行为。这意味着您将有一个单个点来拦截所有请求和响应——允许您在一个地方处理它们。 This article 解释了如何编写和部署这样的检查器。这很容易。

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

    选择的一些注意事项:

    • 在日志记录功能方面,对于大多数场景,它们都同样强大。
    • 我认为 log4net 的 API 更友好
    • EntLib 是一个大型(但经过精心设计的)库。但它确实携带了比 log4not 更多的依赖项。如果您不打算使用除日志记录以外的其他模块,那可能是矫枉过正

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-11
        • 2013-01-09
        • 1970-01-01
        • 1970-01-01
        • 2020-08-13
        • 2011-07-26
        • 1970-01-01
        • 2012-07-01
        相关资源
        最近更新 更多