【问题标题】:How to allow jobs to run after-hours when IIS app pool may be idle?当 IIS 应用程序池可能空闲时,如何允许作业在下班后运行?
【发布时间】:2019-02-04 16:46:14
【问题描述】:

我正在尝试将 hangfire 与 .net 核心网络应用程序一起使用。这些例子看起来很简单,但是我有问题。

如果我想按 cron 计划运行作业,即使 iis 应用程序池处于休眠状态,我是否应该考虑将 hangfire 服务器放在 windows 服务中?

如果在 Web 应用程序中同时使用服务器和客户端,文档中提到修改根 .net 配置文件以允许您的应用程序始终运行。 http://docs.hangfire.io/en/latest/deployment-to-production/making-aspnet-app-always-running.html

为什么不能简单地将应用程序池超时设置为 0?

另一种选择是将hangfire 服务器作为Windows 服务项目的一部分。如果不是真的需要,我宁愿不要弄乱 Windows 服务。即使没有用户向应用程序发出请求以防止应用程序池进入睡眠状态,也需要运行计划的作业(通过 cron 计划)来执行。设置应用程序池空闲超时应该做同样的事情不应该吗?

【问题讨论】:

  • 你有什么反对将它作为 Windows 服务运行的?如果您的代码不需要 HTTP 上下文来运行,那么它不应该在 Web 应用程序中。如果您真的想要按照您的描述进行操作,Hangfire 的文档描述了如何将您的应用程序池置于始终运行模式。但我不推荐它。这是对 Web 应用程序用途的滥用。
  • 这就是你应该挑战 Hangfire 开发者的东西。如果您在网络应用程序中使用该项目,如果您在互联网上搜索会导致比以往更多的问题,而微软从不推荐这样做。请运行 Windows 服务,这是正确处理的任务。
  • 微软确实在 2017 年写过一篇推荐它的博文(但现在被删除了)。

标签: iis hangfire


【解决方案1】:

您应该永远不要期望网站会运行这样的扩展工作。它们旨在运行快速(ish)调用和操作并返回结果。建议是使用 Windows 服务。一旦你开始搞乱应用程序池超时等,你就是在自找麻烦。

我现在可以随着 Net Core 2.2 的发布来修改这个答案。 MS 已添加“后台任务”服务,该服务允许在服务器处于活动状态时在服务器上运行内容:

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-2.2&tabs=visual-studio

【讨论】:

  • 作业本身不会花很长时间,但我想按计划运行。
猜你喜欢
  • 2011-03-15
  • 2011-08-14
  • 2010-12-08
  • 1970-01-01
  • 1970-01-01
  • 2012-08-22
  • 1970-01-01
  • 2011-05-04
  • 2018-07-03
相关资源
最近更新 更多