2011-04-01 147 views
4

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

在我目前的情况下,我想从一系列数据文件导入数据到数据库,但这涉及到相当数量的处理。我希望用户了解该任务的文件有多远,以及遇到的任何问题。

由于处理资源有限,我想排队请求这项服务。

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

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

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

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

+0

不错的问题,我期待着看到一些很好的答案。 – Kev 2011-04-01 11:55:23

+0

关于WAWS,请使用Azure WebJobs – RickAndMSFT 2014-01-21 01:26:05

回答

1

我有一本书,明确介绍了如何整合WF(WorkFlow)和WCF。显然,在这里张贴太多了。我认为你的问题值得一个更长的答案,可以在这个论坛上完全回答,但Microsoft offers some guidance

而对于“WCF和WF”的谷歌搜索出现了大量的结果。


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

由于业务需求,我们最终没有使用MSMQ--我们需要知道是否没有立即收到消息,以便我们可以打电话给商店,而不是让商店在他们的PC能够挑选时获得它从队列中取消消息。但是,它确实工作得很好。

我上面链接的文章是一个很好的开始。


我们目前的设计,我们一起生活的,完全按照您询问的有关Windows服务的内容。

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

有趣的想法 - 谢谢。 – CodeGrinder 2011-04-04 07:30:42

0

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

+0

这是一种想法。问题1是数据库实际上是第三方产品,我只能通过API访问。所以我需要为状态信息创建一些临时存储。 – CodeGrinder 2011-04-04 07:32:44

相关问题