2010-05-11 82 views
2

我有一个应用程序构建,点击一个按钮后点击第三方公司的Web服务,以创建一个电子邮件帐户。但是,有时Web服务需要超过1分钟的响应时间,这是我的客户等待响应的方式。如何创建一个队列

我需要设计一种方法来设置网站外部的某种排队服务。这样我可以将Web服务操作添加到队列中,并建议客户创建该帐户可能需要2分钟。

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

该方法的任何问题?

有没有更好的方法可以想到?

+2

您可以查看BackgroundWorker并生成一个将在后台完成的线程,同时继续处理用户页面请求。 – Lazarus 2010-05-11 18:03:35

+1

我担心你的问题有点模糊,因此......你能更具体地回答这个问题吗? – 2010-05-11 18:04:49

+0

将新的队列()是一个可接受的答案? :p – 2010-05-11 19:21:57

回答

10

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

+0

MSMQ仍在积极开展工作。 MSMQ 5刚刚与Win7和W2K8 R2一起发布。 – 2010-05-11 18:09:18

+0

请注意,如果您愿意,可以通过WCF使用MSMQ。 – 2010-05-11 18:22:42

+0

另外,要使用MSMQ,您将不得不安装它,因为它没有默认完成。它确保消息传递等,这可以很好地工作。 – 2010-05-11 18:24:25

1

创建一个WCF服务来管理队列及其操作。在服务上暴露一个方法来向队列添加一个动作。

这种方式队列是完全独立于您的网站。

1

如果您使用AJAX和Windows Service的组合,该怎么办?

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

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

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

+0

我所学的东西。您不必每隔x秒轮询一次。使用长轮询,彗星,反向ajax,无论你想调用它。它在技术上仍然是一项民意测验,但服务器会保持连接状态直到有数据。 AJAX是异步的,所以保持打开状态不是问题。 – 2010-05-11 19:26:24

0

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