Skip to main content
 首页 » 编程设计

c#之请求建议 : How to Log WCF Web Service Request Info to a database

2024年02月13日25dyllove98

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

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

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

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

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

谢谢, 马特

请您参考如下方法:

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

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

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

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

选择的一些注意事项:

  • 在日志记录功能方面,对于大多数场景,它们都同样强大。
  • 我认为 log4net 的 API 更友好
  • EntLib 是一个大型(但结构合理)的图书馆。但它确实比 log4not 具有更多的依赖性。如果您不打算使用除日志记录之外的其他模块,那么这可能是一种矫枉过正

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