2010-04-07 69 views
2

我需要创建一个服务,它可以在配置的时间间隔内处理排队的请求。例如,转到网络并从网站获取财务数据,要求我们将请求限制为每秒一次。我是WCF的新手,我不确定(1)WCF和MSMQ是否适合执行此操作? (2)如果是的话,执行间隔的最佳机制是什么?一个线程等待?一个计时器(不知道如何工作)。排队的WCF服务每X秒处理一次

回答

2

WCF中没有任何内容可以让你明确地处理它,所以你仍然需要自己完成所有的工作。

尽管您的服务可以处理来自MSMQ的请求,但WCF中的MSMQ侦听器将尽快选择并处理消息;你不能将它们配置为每隔X秒处理一次消息(你可以使用正确的工具来伪造消息,但在我看来,它并不是那么棒)。

如果处理请求之间的延迟时间不是很短,可以使用一个中间队列来保存未决请求。也就是说,无论发送真正的请求,他们都将它们写入队列中,而无人直接监听队列(队列A),而WCF服务在不同的队列(队列B)上侦听。然后,有其他的东西(可以像从任务调度程序运行的脚本一样简单)每X秒/分钟/什么运行一次,并从队列A移动一个消息到队列B,从而触发实际的WCF服务运行。

0

或者您可以使用窗口服务来消费消息。如果您没有在发布消息时使用WCF功能,那么您可能没有理由首先使用wcf

2

WCF和MSMQ是一个伟大的团队!绝对值得一试。

WCF没有提供的部分是“每x秒检查一次”。这里最好的办法是将您的WCF服务托管在Windows NT服务中,并且在NT服务中有一个计时器,每隔x秒检查一次MSMQ队列。真的不应该太难实施。美丽之处在于:您可以非常容易地在NT服务中自行托管WCF服务 - 只需几行代码,即可完全控制正在发生的事件以及何时发生。有关详细信息,请参阅How to Host a WCF service in a managed application上的MSDN文档。

资源: