【问题标题】:About LAB EntLib, MSMQ and WCF关于 LAB EntLib、MSMQ 和 WCF
【发布时间】:2011-10-20 12:28:21
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: msmq netmsmqbinding msmq-wcf


    【解决方案1】:

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

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

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

    无论如何,我不确定这是否能回答您的问题。 Here's 很好地概述了这一切在 EntLib 中是如何工作的。

    【讨论】:

    • 非常感谢,尽管我的问题很混乱,但你完全明白了我的意思。
    猜你喜欢
    • 2011-01-10
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 2010-09-22
    • 2012-03-16
    • 2012-11-10
    • 2016-02-02
    • 1970-01-01
    相关资源
    最近更新 更多