0

我想定期运行一个耗时的脚本(从第 3 方 API 更新数据库)。我想知道最好的做法是什么:

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

提前致谢!

4

3 回答 3

1

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

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

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

于 2012-06-04T09:52:09.047 回答
1

一些选项:

  • 使用一个始终运行的单独线程 - 并按时更新(然后休眠)。
  • 使用计时器并触发更新事件。
  • 使用缓存过期触发器,但对其进行测试,使其在没有用户访问站点的情况下继续运行。

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

于 2012-06-04T09:35:57.403 回答
0

您可以做的是在 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 分钟或将其增加更多并检查。

于 2012-06-04T09:35:02.630 回答