通过ASP.NET调用的长时间运行任务的模式

时间:2011-04-01 11:45:28

标签: asp.net ajax wcf workflow-foundation design-patterns

我需要从ASP.NET页面调用一个长时间运行的任务,并允许用户在执行时查看任务进度。

在我目前的情况下,我想将一系列数据文件中的数据导入数据库,但这需要相当多的处理。我希望用户能够看到任务的文件有多远,以及在此过程中遇到的任何问题。

由于处理资源有限,我想将此服务的请求排队。

我最近看过Windows Workflow并想知道它是否可以提供解决方案?

我在想一个可能看起来像的解决方案:

ASP.NET AJAX page -> WCF Service -> MSMQ -> Workflow Service *or* Windows Service

有没有人有任何想法,经验或以前做过这类事情?

2 个答案:

答案 0 :(得分:1)

我有一本书明确介绍了如何集成WF(WorkFlow)和WCF。显然,这里发布的内容太多了。我认为你的问题应该得到比这个论坛更容易回答的答案,但是Microsoft offers some guidance

Google搜索“WCF和WF”会产生大量结果。


我确实有一个正在开发的应用程序,我们使用类似的过程使用MSMQ。我们的想法是在产品召回或影响大量商店的已知问题的情况下向我们的所有商店发送紧急信息。它开发和测试OK。

由于业务需求,我们最终没有使用MSMQ - 我们需要知道是否没有立即收到消息以便我们可以调用商店,而不是让商店在他们的PC能够接收时获取它来自队列的消息。但是,它确实很有效。

我上面链接的文章是一个很好的起点。


我们当前的设计,即我们使用的设计,完全符合您对Windows服务的要求。

  • 我们有一个网页可以输入消息并选择分发列表。 - 这些保存在数据库中
  • 我们有一个单独的Windows服务(我们称之为AlertSender),它会轮询数据库并检查新消息。
  • 商店级PC具有Windows服务,该服务托管侦听消息的WCF客户端(AlertListener)
  • 当AlertSender找到需要熄灭的消息时,它会将它们发送到AlertListener,后者负责向商店显示消息并播放警报声。
  • 发送消息时,AlertSender会更新数据库中消息的状态。
  • 当商店收到消息时,同事输入他们的员工#并单击按钮以确认他们已收到消息。 (对我们来说是关键业务要求,因为如果所有商店都没有得到消息,我们可能需要亲自打电话让他们从货架上移除受污染的产品等。)
  • 最后,我们的管理部门有一个与AlertId绑定的报告(ASP.NET),显示所有待处理的消息及其状态。

答案 1 :(得分:0)

您可以让后端导入过程在完成任务的各个部分时将状态记录写入数据库,并且Web应用程序可以只是以任意间隔轮询数据库,并更新进度条或以其他方式勾选任务完成后,无论UI中是否合适。