我对这个问题并不是很满意,因为我一直都在写自己的记录器。
我有一个WCF REST Web服务。 此服务需要将错误信息记录到谁使用它以及何时使用。
为此,已选择Enterprise Library(5.0)中的Logging Application Block。 为了保持良好的性能,我们决定使用MSMQ。目的是将日志存储在那里,直到我们在某个时候将其存档。
我在几个网站上看到,我们可以使用WCF将消息传输到MSMQ,然后使用另一个实体来处理队列,或者我们可以使用MSMQ作为传输协议与WCF通信。现在我只使用LAB的Logger类将日志插入队列中。
我只想使用MSMQ从记录功能中取消我的web服务。
所以这是我的问题: MSMQ对WCF有用的情况是什么? 在我描述的情况下,使用另一个WCF应用程序来记录文件中的某些内容并不过分吗?
答案 0 :(得分:2)
我认为你在这里混淆了两件事。 WCF中的MSMQ传输就是这样一种可以用来代替HTTP或TCP的传输机制。您的问题是(我假设)您想要从 WCF服务异步记录,这是一个好主意。 EntLib包含MSMQ Distributor服务,该服务将从应用程序写入的日志事件获取到队列,假设已正确配置的日志块配置将MSMQ指定为目标。然后,分发者会将其写入数据库。
异步日志记录是一件非常聪明的事情,因为它可以确保您的事件处于持久性介质中,例如在数据库已经废弃的灾难性情况下。更不用说数据库不会作为正常应用程序操作的一部分进行访问,从而消除了潜在的故障点。
一旦使用自定义数据库日志记录机制,我就开始使用Web应用程序。有些地方会在事务中发生数据库操作,并且在失败时(比如来自ADO的关系约束错误)会向日志写入一条消息......只是让它与主事务一起回滚。如果您作为异常处理策略的一部分直接写入数据库,那么这就是您可以遇到的问题。
无论如何,我不确定这是否能回答你的问题。 Here's很好地概述了这一切在EntLib中是如何运作的。