今天,我们已经构建了一个控制台应用程序,用于运行我们的ASP计划任务。网的网站。但是我认为这种方法容易出错,而且很难维护。如何执行计划任务(在windows/IIS/ASP。网络环境)
更新:
任务示例:
从数据库中的电子邮件队列发送电子邮件 从数据库中删除过时的对象 从谷歌AdWords检索统计数据,并在数据库中填充一个表。
今天,我们已经构建了一个控制台应用程序,用于运行我们的ASP计划任务。网的网站。但是我认为这种方法容易出错,而且很难维护。如何执行计划任务(在windows/IIS/ASP。网络环境)
更新:
任务示例:
从数据库中的电子邮件队列发送电子邮件 从数据库中删除过时的对象 从谷歌AdWords检索统计数据,并在数据库中填充一个表。
当前回答
我们也使用控制台应用程序。如果您使用像Log4net这样的日志工具,您可以正确地监视它们的执行。另外,我不确定它们为什么比网页更难维护,因为如果设计得当,两者之间可能会共享一些相同的代码库。
如果你不愿意让这些任务定时运行,你可以在你网站的管理部分设置一个网页作为队列。用户输入一个运行任务的请求,它反过来在MyProcessQueue表中插入一个空白的日期戳记录,您的计划任务每X分钟检查一次MyProcessQueue中的新记录。这样,它只在客户希望它运行时运行。
希望这些建议能有所帮助。
其他回答
为什么要重新发明轮子,使用Threading和Timer类。
protected void Application_Start()
{
Thread thread = new Thread(new ThreadStart(ThreadFunc));
thread.IsBackground = true;
thread.Name = "ThreadFunc";
thread.Start();
}
protected void ThreadFunc()
{
System.Timers.Timer t = new System.Timers.Timer();
t.Elapsed += new System.Timers.ElapsedEventHandler(TimerWorker);
t.Interval = 10000;
t.Enabled = true;
t.AutoReset = true;
t.Start();
}
protected void TimerWorker(object sender, System.Timers.ElapsedEventArgs e)
{
//work args
}
我不确定你指的是哪种计划任务。如果你的意思是“每小时刷新foo.xml”类型的任务,那么使用Windows的计划任务系统。(通过“at”命令,或者通过控制器。)让它运行一个控制台应用程序,或者请求一个特殊的页面来启动这个过程。
编辑:我应该补充,这是一个好的方式,让你的IIS应用程序运行在预定的点。因此,假设您希望每30分钟检查一次数据库,并通过电子邮件提醒用户一些数据,您可以使用计划任务来请求这个页面,从而让IIS处理事情。
如果你的需求更复杂,你可以考虑创建一个Windows服务,并让它运行一个循环来做你需要的任何处理。这样做还有一个好处,就是可以将代码分离出来用于扩展或管理目的。缺点是,您需要处理Windows服务。
我们也使用控制台应用程序。如果您使用像Log4net这样的日志工具,您可以正确地监视它们的执行。另外,我不确定它们为什么比网页更难维护,因为如果设计得当,两者之间可能会共享一些相同的代码库。
如果你不愿意让这些任务定时运行,你可以在你网站的管理部分设置一个网页作为队列。用户输入一个运行任务的请求,它反过来在MyProcessQueue表中插入一个空白的日期戳记录,您的计划任务每X分钟检查一次MyProcessQueue中的新记录。这样,它只在客户希望它运行时运行。
希望这些建议能有所帮助。
使用Windows调度器运行网页。
为了防止恶意用户或搜索引擎蜘蛛运行它,当您设置计划任务时,只需使用查询字符串调用web页面,即:mypage.aspx?从= scheduledtask
然后在页面加载时,只需使用一个条件: 如果请求。查询string["from"] == "scheduledtask") { / / executetask }
这样,任何搜索引擎爬行器或恶意用户都无法执行您的计划任务。
一种选择是设置一个windows服务,让它调用你的计划任务。
在winforms中,我使用了计时器,不认为这将在ASP中很好地工作。网