在ASP.NET网站中动态创建定时任务

4
我需要一些关于在Web应用程序层面动态创建某种定时任务的最佳方法的建议。该定时任务将定期从外部API端点拉取信息并存储到数据库中,直到特定的结束时间。
通常,我会创建一个Windows服务来执行这项工作。不幸的是,网站管理员可能会创建多个任务来查询外部API的不同条件。因此可能会有多个任务正在运行。
我一直在尝试实现在计时器上运行的后台工作线程。这是否是最佳方法?或者使用类似HangfireQuartz.net的东西会是一个更好的解决方案,以确保我的后台进程不断运行?
我不知道在Web应用程序内部是否可行,以确保在特定持续时间内可以随时运行任务。

一个投票支持 Hangfire :) - cuongle
Henselman的博客,Hangfire是最好的,相信我 :) - sepehr
1个回答

1

我尝试使用 HangfireQuartz.Net,在我看来,它们都非常适合调度任务。 Hangfire 有一个良好的界面来管理计划任务,但是当我在 IIS 上发布应用程序后遇到了一些问题,我转而使用 Quartz.Net,它可以与 IIS 6.0/7.5 的 Keep Alive 服务 完美配合。因此,要使用 Quartz.Net,您可以查看 使用 Quartz.Net 在 ASP.NET 中进行计划任务。另一方面,为了使您发布的应用程序在应用程序池回收、IIS/应用程序重启等情况下保持运行,请在您发布应用程序的服务器上安装 IIS 6.0/7.5 的 Keep Alive 服务。有关这些问题的详细信息,请查看下面页面上的我的答案:

希望这可以帮到您...


2
如果您对服务器拥有完全控制权,则可以配置Hangfire或Quartz.Net使用后台服务运行作业,而不是在IIS中运行它们。这使得作业更加稳定。我发现Hangfire更容易通过其对MSMQ的支持进行配置。 - Chris Chilvers
1
@ChrisChilvers 实际上,最好将调度作为后台服务而不是在IIS中运行。那么,对于一个MVC应用程序,如何执行呢?你能否逐步解释一下?谢谢。 - Murat Yıldız
1
@MuratYıldız 感谢您的回复,我会查看您发布的链接。 - SurinderBhomra
1
@MuratYıldız 对于这个最简单的选择是使用Hangfire。Hangfire文档有一个完整的部分介绍了不同的后台处理方法,包括在Windows服务中处理作业并配置hangfire以使用带有MSMQ的SQL Server。 - Chris Chilvers
@ChrisChilvers 我尝试了Hangfire并发现即使我停止IIS上的应用程序和应用程序池,Hangfire仍然会继续触发触发器。唯一停止触发的方法是从仪表板中将其删除,但在启动应用程序后它会再次创建。有没有解决这个问题的想法? - user5871859
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接