管理Web应用程序中长时间运行流程的策略?

big*_*gtv 5 c# sql-server asp.net wcf windows-services

我正在开发一个web asp.net应用程序.应用程序的一个特性是用户能够排队一些长时间运行的操作,然后命中运行队列将被处理.

我不希望用户必须等待所有操作完成或确实打开浏览器/应用程序.但是,如果它们保留或返回到页面,我希望他们能够看到每个作业的状态,即等待,进行中,完成或失败.

我自然而然地寻找最强大,最可靠和可扩展的解决方案,因为在任何时候队列中都可能有大量的作业.

根据我的研究,有人建议asp.net可以调用windows服务吗?这可能是托管WCF Web服务.

寻找过去可能有类似要求的任何人的建议.

mik*_*key 5

还可以查看MSMQ,

http://msdn.microsoft.com/en-us/library/ms711472(v=vs.85).aspx

基本上,Web应用程序将"作业"或"作业组"放入队列中.

该服务不断运行,使下一个"工作"或"工作组"出局并与他们开展业务.

完成后,服务将结果放入另一个队列或Web应用程序访问的DB(或其他一些共享资源)中,并显示其状态或结果.

请享用.


Can*_*cer 2

通常好的方法是使用 Windows 服务来执行计划的作业。您可以使用像Quartz.NET这样的库,它具有各种调度功能。如果您不需要特定的调度,您可以让 Windows 服务充当工作进程并简单地消耗作业。除此之外,您还需要促进 Web 应用程序和执行排队任务的服务之间的通信。为此,您可以使用多种技术,例如使用数据库中的表或仅使用某种其他类型的进程间通信技术(远程处理、命名管道、套接字、消息队列等)。

我实际上实现了类似的东西,其中有一个 Windows 服务执行计划的作业,并且有一个 ASP.NET Web 应用程序发出所有作业请求。ASP.NET 应用程序将一些作业发布到数据库中,这些作业稍后由服务进程使用。