我想定期运行一个耗时的脚本(从第 3 方 API 更新数据库)。我想知道最好的做法是什么:
- “脚本”应该是什么 - 一个 ASP.NET 服务?请记住我在共享主机上,这可能是不可能的(但我想知道)。
- 如何安排脚本定期/在设定的时间自动运行?
提前致谢!
您无法保证某些东西在正常的 IIS 设置中每晚都会运行。因此,批处理作业很难处理。IIS 的唯一执行“模式”是请求。如果您的应用程序没有请求,则它根本不会运行,因此 IIS 不会花费任何资源来执行应用程序中的代码,即它可以完全卸载它。
如果您有自己的主机,您通常会创建一个 Windows 服务来运行您的后台任务。我相信在 Azure 中也是如此。但是对于标准的共享 IIS 主机,您基本上无法设置计划的后台任务。
最简单的黑客攻击之一是设置一个受保护的服务,该服务在收到请求时执行作业。然后,您可以确保外部调用者以所需的时间间隔调用您的服务。
一些选项:
我建议查看http://www.beansoftware.com/ASP.NET-Tutorials/Scheduled-Tasks.aspx以了解有关这些方法的更多详细信息。
您可以做的是在 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 Alives。
在 IIS 管理器中,选择 Http Response Headers Module,将其打开,然后在 Actions 窗格中,选择 Set Common Headers,然后在其中选择 Enable Http Keep Alives。
此外,检查您的应用程序池的设置 -
选择您的应用程序的应用程序池,从右侧的操作选项卡中选择高级设置。
那里有一个名为 - 空闲超时(分钟)的设置
默认为 20 分钟。将其设置为 60 分钟或将其增加更多并检查。