1

我对这个主题不太满意,因为直到现在我一直都在编写自己的记录器。

我有一个 WCF REST Web 服务。该服务需要记录从错误到谁使用它以及何时使用它的信息。

为此,选择了 Enterprise Library (5.0) 中的 Logging Application Block。为了保持良好的性能,我们决定使用 MSMQ。目的是将日志存储在那里,直到我们将其放入文件中。

我在几个网站上看到我们可以使用 WCF 将消息传输到 MSMQ,然后使用另一个实体处理队列,或者我们可以使用 MSMQ 作为传输协议与 WCF 通信。现在我只是使用 LAB 的 Logger 类将日志插入队列中。

我只想使用 MSMQ 将我的 web 服务与日志记录功能不同步。

所以这是我的问题:MSMQ 在哪些情况下对 WCF 有用?在我所描述的情况下,使用另一个 WCF 应用程序只是在文件中记录一些内容是不是有点矫枉过正?

4

1 回答 1

2

我认为你在这里混淆了两件事。WCF 中的 MSMQ 传输就是这样,一种可以代替 HTTP 或 TCP 使用的传输机制。您的问题是(我假设)您想WCF 服务异步登录,这是一个好主意。EntLib 包括 MSMQ Distributor 服务,它将拾取从您的应用程序写入的日志事件到队列,假设正确配置了将 MSMQ 指定为目标的日志块配置。然后分发者将其实际写入数据库。

异步日志记录是一件非常聪明的事情,因为它可以确保您的事件在数据库已经消失的灾难性情况下处于持久性介质中。更不用说数据库不会作为正常应用程序操作的一部分进行访问,这消除了潜在的故障点。

我曾经在一个使用自定义数据库日志记录机制的 Web 应用程序上工作过。在某些地方,DB 操作会在事务中发生,并且在失败时(比如来自 ADO 的关系约束错误)会向日志写入一条消息……只是让它与主事务一起回滚。如果您将直接写入数据库作为异常处理策略的一部分,那么您可能会遇到这种问题。

无论如何,我不确定这是否能回答你的问题。这是关于这一切在 EntLib 中如何工作的一个很好的概述。

于 2011-10-20T18:48:57.520 回答