今天,我们已经构建了一个控制台应用程序,用于运行我们的ASP计划任务。网的网站。但是我认为这种方法容易出错,而且很难维护。如何执行计划任务(在windows/IIS/ASP。网络环境)
更新:
任务示例:
从数据库中的电子邮件队列发送电子邮件 从数据库中删除过时的对象 从谷歌AdWords检索统计数据,并在数据库中填充一个表。
今天,我们已经构建了一个控制台应用程序,用于运行我们的ASP计划任务。网的网站。但是我认为这种方法容易出错,而且很难维护。如何执行计划任务(在windows/IIS/ASP。网络环境)
更新:
任务示例:
从数据库中的电子邮件队列发送电子邮件 从数据库中删除过时的对象 从谷歌AdWords检索统计数据,并在数据库中填充一个表。
当前回答
还有另一种方法:
1)创建一个“心跳”web脚本,负责在任务到期或过期时启动任务。
2)在某个地方创建一个预定的进程(最好是在同一个web服务器上),它会命中webscript,并强制它以定期的时间间隔运行。(例如,windows调度任务,使用IE或其他工具悄悄启动热节拍脚本)
任务代码包含在web脚本中的事实纯粹是为了将代码保持在web应用程序代码库中(假设两者相互依赖),这对web开发人员来说更容易管理。
另一种方法是创建一个可执行的服务器脚本/程序,它自己执行所有的计划工作,并将可执行文件本身作为计划任务运行。这可以实现web应用程序和计划任务之间的基本解耦。因此,如果你需要在web应用程序/数据库可能关闭或无法访问的情况下运行计划任务,你应该使用这种方法。
其他回答
我不确定你指的是哪种计划任务。如果你的意思是“每小时刷新foo.xml”类型的任务,那么使用Windows的计划任务系统。(通过“at”命令,或者通过控制器。)让它运行一个控制台应用程序,或者请求一个特殊的页面来启动这个过程。
编辑:我应该补充,这是一个好的方式,让你的IIS应用程序运行在预定的点。因此,假设您希望每30分钟检查一次数据库,并通过电子邮件提醒用户一些数据,您可以使用计划任务来请求这个页面,从而让IIS处理事情。
如果你的需求更复杂,你可以考虑创建一个Windows服务,并让它运行一个循环来做你需要的任何处理。这样做还有一个好处,就是可以将代码分离出来用于扩展或管理目的。缺点是,您需要处理Windows服务。
你可以很容易地创建一个Windows服务,使用线程池间隔运行代码。RegisterWaitForSingleObject”方法。它真的很光滑,很容易安装。这种方法比使用框架中的任何计时器都更有效。
看看下面的链接,了解更多信息:
在。net中使用Windows服务运行周期进程: http://allen-conway-dotnet.blogspot.com/2009/12/running-periodic-process-in-net-using.html
一种选择是设置一个windows服务,让它调用你的计划任务。
在winforms中,我使用了计时器,不认为这将在ASP中很好地工作。网
如果你拥有服务器,你应该使用windows任务调度程序。使用AT /?从命令行查看选项。
否则,在基于web的环境中,您可能不得不做一些讨厌的事情,比如设置一台不同的机器,以定时间隔向某个页面发出请求。
这个图书馆非常好用 http://www.codeproject.com/KB/cs/tsnewlib.aspx
它允许您通过. net代码直接管理Windows计划任务。