用于在 Web 应用中管理长时间运行的进程的策略
本文关键字:运行 进程 策略 长时间 管理 Web 应用 用于 | 更新日期: 2023-09-27 17:57:07
我正在开发一个Web asp.net 应用程序。该应用程序的一个特点是,用户能够对一些长时间运行的操作进行排队,然后点击运行队列将被处理。
我不希望用户必须坐下来等待所有操作完成或确实保持浏览器/应用程序打开。但是,如果他们保留或返回页面,我希望他们能够看到每个作业的状态,即等待、正在进行、已完成或失败。
我自然在寻找最强大、最可靠和可扩展的解决方案,因为队列中随时可能有大量作业。
根据我的研究,有人建议 asp.net 可以调用Windows服务?这可能是承载 WCF Web 服务。
从过去可能有类似要求的人那里寻求任何建议。
另请查看 MSMQ,
http://msdn.microsoft.com/en-us/library/ms711472(v=vs.85).aspx
基本上,Web应用程序将"作业"或"作业组"放入队列中。
该服务不断运行,将下一个"作业"或"作业组"取消排队,然后开始处理它们。
完成后,服务会将结果放入另一个队列或 Web 应用程序访问的数据库(或其他一些共享资源)中,并显示其状态或结果。
享受。
通常一个好的方法是让 Windows 服务执行计划作业。您可以使用像 Quartz.NET 这样的库,它具有所有类型的调度功能。如果不需要特定的计划,则只需让 Windows 服务充当工作进程,只需使用作业即可。除此之外,您还需要促进 Web 应用程序与执行排队任务的服务之间的通信。为此,可以使用多种技术,例如使用数据库中的表或仅使用某种其他类型的进程间通信技术(远程处理、命名管道、套接字、消息队列等)。
我实际上实现了这样的东西,其中有一个Windows服务执行计划作业,并且有一个 ASP.NET Web应用程序正在提出所有作业请求。ASP.NET 应用程序将一些作业发布到数据库中,这些作业稍后由服务进程使用。
使用Windows服务是个好主意。虽然,我没有任何使用它的经验,也不知道意外的陷阱。
此外,您可能想查看"即发即弃"模式。(更多信息和示例可以在这里找到)使用多线程可能是另一种选择。有关更多信息,请查看:
http://msdn.microsoft.com/en-us/magazine/cc163587.aspx
http://msdn.microsoft.com/en-us/magazine/cc164128.aspx#S6http://msdn.microsoft.com/en-us/library/ff647332.aspx
我也有类似的问题。我有一个 Web 应用程序,可以启动一个长时间运行的进程。我想更新 UI,以便用户看到发生了什么。我有一个类,可以设置一些属性,然后启动该过程。这是我的方法。
1) 向我的类添加一个属性,作业 ID.
2) 当 Web 用户启动作业时,生成一个新的作业 ID 并将其分配给上面的属性.
3) 当我的类正在运行时,更新数据库中的日志表。根据作业 ID.
进行更新4)在前端,有一些简单的AJAX进程检查作业ID的状态x秒.
就是这样。