2

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

4

3 回答 3

2

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

WCF 没有提供开箱即用的部分是“每 x 秒检查一次”。这里最好的方法是将 WCF 服务托管在 Windows NT 服务中,并在 NT 服务中设置一个计时器,该计时器每隔 x 秒检查一次 MSMQ 队列。应该不会太难实现,真的。美妙之处在于:您可以非常轻松地在 NT 服务中自托管 WCF 服务 - 只需几行代码,您就可以完全控制发生的事情和时间。有关详细信息,请参阅有关如何在托管应用程序中托管 WCF 服务的 MSDN 文档。

资源:

于 2010-04-08T07:19:08.713 回答
2

WCF 中没有内置任何内容可以让您显式处理此问题,因此您仍然需要自己完成所有工作。

虽然您的服务当然可以处理来自 MSMQ 的请求,但 WCF 中的 MSMQ 侦听器将尽快挑选和处理消息;您不能将它们配置为仅每 X 秒处理一次消息(如果使用正确的工具,您可以伪造它,但在我看来它不会那么好)。

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

于 2010-04-07T18:12:01.607 回答
0

或者您可以只使用窗口服务来使用消息。如果您没有使用 WCF 功能,即在消息发布后立即使用它,那么您可能一开始就没有理由使用 wcf

于 2010-04-07T23:19:22.660 回答