如何创建队列

时间:2010-05-11 18:01:20

标签: c# queue

我有一个应用程序构建,它可以访问第三方公司的Web服务,以便在客户单击按钮后创建电子邮件帐户。但是,有时Web服务的响应时间超过1分钟,这是我的客户坐在那里等待回复的方法。

我需要设计一种从网站外部设置某种排队服务的方法。通过这种方式,我可以将Web服务操作添加到队列中,并告知客户创建帐户最多可能需要2分钟。

我很想知道实现这一目标的最佳方法。我最初的想法是通过数据库表请求操作,该数据库表将由通过Windows计划任务运行的控制台应用程序定期检查。

该方法有任何问题吗?

你能想到更好的方法吗?

5 个答案:

答案 0 :(得分:10)

我会使用MSMQ,它可能是一种较旧的技术,但它非常适合您描述的场景。

答案 1 :(得分:1)

创建WCF服务以管理队列及其操作。在服务上公开了一个向队列添加操作的方法。

这样,队列完全独立于您的网站。

答案 2 :(得分:1)

如果您使用AJAX和Windows服务的组合怎么办?

在网站端:当此人选择创建电子邮件帐户时,您将请求添加到数据库表。如果他们想要等待,请提供一个使用AJAX的网页,每隔一段时间(10秒钟)检查一下他们的帐户是否已创建。如果它是应用程序式网站,您可以让它们继续工作并在创建帐户后弹出消息。如果他们不想等待,他们会关闭页面或浏览另一个页面,并在完成后收到电子邮件。

在处理方面:创建一个Windows服务,检查表是否有新请求。一旦完成请求,它必须以某种方式与用户通信,可能通过在请求上设置状态标志。这就是AJAX调用所要求的。你也可以发送一封电子邮件。

如果将计划任务与控制台应用程序而不是Windows服务一起使用,则可能会同时运行多个实例。您必须实现某种锁定机制(在应用程序或请求级别)以防止处理相同的事情两次。

答案 3 :(得分:0)

答案 4 :(得分:0)

不幸的是,你的问题太模糊了,无法回答任何真实细节。如果您希望在主应用程序之外进行管理,那么Windows服务将比创建控制台更合适......从集成和生命周期管理的角度来看,这为添加其他功能提供了一个很好的基础(例如,性能计数器,托管WCF,Remoting等管理服务......)。 MSMQ虽然在部署方面有更多的参与,但它很棒。如果您愿意投入时间,那么使用MSMQ有很多优势。如果你真的想创建自己的点对点队列,那么网上有大量的例子可以作为一个例子。这是一个,http://www.smelser.net/blog/page/SmellyQueue-(Durable-Queue).aspx