今天,我们已经构建了一个控制台应用程序,用于运行我们的ASP计划任务。网的网站。但是我认为这种方法容易出错,而且很难维护。如何执行计划任务(在windows/IIS/ASP。网络环境)

更新:

任务示例:

从数据库中的电子邮件队列发送电子邮件 从数据库中删除过时的对象 从谷歌AdWords检索统计数据,并在数据库中填充一个表。


当前回答

我不确定你指的是哪种计划任务。如果你的意思是“每小时刷新foo.xml”类型的任务,那么使用Windows的计划任务系统。(通过“at”命令,或者通过控制器。)让它运行一个控制台应用程序,或者请求一个特殊的页面来启动这个过程。

编辑:我应该补充,这是一个好的方式,让你的IIS应用程序运行在预定的点。因此,假设您希望每30分钟检查一次数据库,并通过电子邮件提醒用户一些数据,您可以使用计划任务来请求这个页面,从而让IIS处理事情。

如果你的需求更复杂,你可以考虑创建一个Windows服务,并让它运行一个循环来做你需要的任何处理。这样做还有一个好处,就是可以将代码分离出来用于扩展或管理目的。缺点是,您需要处理Windows服务。

其他回答

创建一个自定义的Windows服务。

我把一些关键任务设置为预定的控制台应用程序,发现它们很难维护。我创建了一个带有“心跳”的Windows服务,它每隔几分钟就会检查数据库中的日程安排。结果很好。

话虽如此,我仍然在使用预定的控制台应用程序来完成大部分非关键的维护任务。如果没坏,就别修。

使用Windows调度器运行网页。

为了防止恶意用户或搜索引擎蜘蛛运行它,当您设置计划任务时,只需使用查询字符串调用web页面,即:mypage.aspx?从= scheduledtask

然后在页面加载时,只需使用一个条件: 如果请求。查询string["from"] == "scheduledtask") { / / executetask }

这样,任何搜索引擎爬行器或恶意用户都无法执行您的计划任务。

我已经成功地在ASP中使用了Abidar。NET项目(这里有一些背景信息)。

此方法的唯一问题是,如果ASP。NET web应用程序从内存中卸载。由于使用率低)。我尝试过的一件事是创建一个任务,每5分钟访问一次web应用程序,让它保持活跃,但这似乎并不可靠,所以现在我使用Windows调度器和基本的控制台应用程序来做这件事。

理想的解决方案是创建一个Windows服务,尽管这可能是不可能的。如果您正在使用共享托管环境)。从维护的角度来看,这也使得在web应用程序中保持内容更容易一些。

一个新的任务调度器类库

注意:自从这个库创建以来,微软已经为Windows Vista引入了一个新的任务调度器(task scheduler 2.0)。这个库是Task Scheduler 1.0接口的包装器,该接口在Vista中仍然可用,并且与Windows XP、Windows Server 2003和Windows 2000兼容。

http://www.codeproject.com/KB/cs/tsnewlib.aspx

这个图书馆非常好用 http://www.codeproject.com/KB/cs/tsnewlib.aspx

它允许您通过. net代码直接管理Windows计划任务。