如何处理在IIS上运行的网站的计划任务?

时间:2008-12-20 06:13:31

标签: asp.net windows scheduled-tasks

我有一个在Windows服务器上运行的网站,我想添加一些执行各种职责的预定后台任务。例如,客户希望用户接收汇总网站上最近活动的电子邮件。

如果发送电子邮件是唯一需要执行的任务,我可能只会设置一个运行脚本以发送这些电子邮件的计划任务。但是,对于此特定站点,客户端希望执行各种不同的计划任务,其中一些始终运行,其中一些仅在满足某些条件时才运行。现在,他们已经给了我一些他们希望实施的初步内容,但我知道将来会有更多。

我想知道的是,如果有一个简单的Windows解决方案可以让我定义需要运行的任务,然后让每天运行一个计划任务并执行已定义的每个计划任务。批处理文件是最简单的方法,还是我可以使用其他解决方案?

5 个答案:

答案 0 :(得分:4)

为了简化生活,我会避免构建一个巨大的单片exe并将工作分解为单个任务,并为每个任务执行Windows计划任务。这样,您可以更轻松地维护代码库,并在更细粒度的级别上更改功能。

稍后您可以构建一个Windows服务,根据计划为每个不同的任务动态加载插件。这对于未来的项目可能更具可重用性。

但说实话,如果你在截止日期前我会应用KISS原则并按照每项任务计划任务。

答案 1 :(得分:2)

我会在门外使用Windows服务。这将成为满足您需求的最具扩展性的方法,创建服务不会增加您的开发时间,并且可能会节省您的时间。

答案 2 :(得分:2)

我们使用Windows Scheduler Service启动只能将参数传递给Web Service的小型控制台应用程序。

例如,如果用户已安排报告#388和#88,则使用如下命令行创建计划任务:

  

c:\ launcher \ app.exe报告:388报告:88

当调度程序触发时,此应用程序只在Web服务上执行Web方法,例如,InternalService.SendReport(int id)。

通常,您已经在Web应用程序中提供了所有必需的业务逻辑。这种方法允许以最小的努力使用它,因此不需要使用可插拔模块等创建任何复杂的.exe或Windows服务。

答案 3 :(得分:2)

从预定的EXE而不是从网页内部执行操作的问题在于,操作可能会受益于网页可能拥有的资源,甚至是需要 - - IIS缓存和ORM缓存是我想到的两件事。对于ORM,在Web应用程序上下文之外进行数据库更改甚至可能是致命的。我的首选是安排curl.exe从localhost请求网页。

答案 4 :(得分:1)

使用Windows计划任务或创建自行执行计划的Windows服务。