【问题标题】:Pattern for long running tasks invoked through ASP.NET通过 ASP.NET 调用的长时间运行任务的模式
【发布时间】:2011-04-01 11:45:27
【问题描述】:

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

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

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

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

我正在考虑一个可能看起来像这样的解决方案:

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

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

【问题讨论】:

  • 好问题,我期待看到一些好的答案。
  • 在 WAWS 上,使用 Azure WebJobs

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


【解决方案1】:

我有一本书明确介绍了如何集成 WF(工作流)和 WCF。显然,在这里发布太多了。我认为您的问题值得更长的答案,而不是在这个论坛上可以很容易地完全回答,但是Microsoft offers some guidance

Google 搜索“WCF 和 WF”会得到很多结果。


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

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

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


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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 就是这样的想法。问题 1 是数据库实际上是第三方产品,我只能通过 API 访问。所以我需要为状态信息创建一些临时存储。
    猜你喜欢
    • 2012-08-13
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    相关资源
    最近更新 更多