在共享主机上定期运行耗时的 ASP.NET 脚本的最佳方法是什么

本文关键字:NET ASP 脚本 最佳 是什么 方法 主机 共享 运行 | 更新日期: 2023-09-27 18:36:08

我想定期运行一个耗时的脚本(从第三方API更新数据库)。我想知道这样做的最佳实践是什么:

  1. "脚本"应该是什么 - ASP.NET 服务?请记住,我在共享主机上,这可能是不可能的(但我想知道)。
  2. 如何将脚本安排为定期/在设定的时间自动运行?

提前感谢!

在共享主机上定期运行耗时的 ASP.NET 脚本的最佳方法是什么

一些选项:

  • 使用一个始终运行的单独线程 - 并按时进行更新(然后休眠)。
  • 使用计时器并触发更新事件。
  • 使用缓存过期触发器,但对此进行测试,以便它继续运行而无需用户访问站点。

我建议查看 http://www.beansoftware.com/ASP.NET-Tutorials/Scheduled-Tasks.aspx 以获取有关这些方法的更多详细信息。

您无法保证某些内容在正常的 IIS 设置中运行,例如每晚运行。因此,批处理作业处理起来很痛苦。IIS 的唯一执行"模式"是请求。如果您的应用程序没有请求,它根本不会运行,因此 IIS 不会花费任何资源在您的应用程序中执行代码,即它可以完全卸载它。

如果您有自己的主机,则通常会创建一个 Windows 服务来运行后台任务。我相信在Azure中也是如此。但对于标准共享 IIS 主机,基本上无法设置计划的后台任务。

最简单的技巧之一是设置一个受保护的服务,该服务在收到请求时执行作业。然后,可以确保外部调用方按所需的时间间隔调用您的服务。

你可以做的是在 Global.asax 中添加一个 System.Timers.Timer 。

System.Threading.Timer timer = new System.Threading.Timer(new TimerCallback(TimerElapsed), null, new Timespan(0), new Timespan(24, 0, 0));
// This will run every 24 hours.
private void TimerElapsed(object o)
{
    // Do stuff.
}

在 IISManager 中,为应用程序启用 HTTP-Keep Alive。

在 IIS 管理器中,选择"Http 响应标头模块",将其打开,然后在"操作窗格"中选择"设置公共标头",然后在其中选择"启用 Http 保持活动状态"。

此外,请检查应用程序池的设置 -

选择应用程序的应用程序池,从右侧的"操作"选项卡中选择"高级设置"。

其中有一个名为 - 空闲超时(分钟)的设置

默认情况下为 20 分钟。让它像 60 分钟一样,或者进一步增加它并检查。