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

更新:

任务示例:

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


当前回答

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

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

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

其他回答

你可以很容易地创建一个Windows服务,使用线程池间隔运行代码。RegisterWaitForSingleObject”方法。它真的很光滑,很容易安装。这种方法比使用框架中的任何计时器都更有效。

看看下面的链接,了解更多信息:

在。net中使用Windows服务运行周期进程: http://allen-conway-dotnet.blogspot.com/2009/12/running-periodic-process-in-net-using.html

我们也使用控制台应用程序。如果您使用像Log4net这样的日志工具,您可以正确地监视它们的执行。另外,我不确定它们为什么比网页更难维护,因为如果设计得当,两者之间可能会共享一些相同的代码库。

如果你不愿意让这些任务定时运行,你可以在你网站的管理部分设置一个网页作为队列。用户输入一个运行任务的请求,它反过来在MyProcessQueue表中插入一个空白的日期戳记录,您的计划任务每X分钟检查一次MyProcessQueue中的新记录。这样,它只在客户希望它运行时运行。

希望这些建议能有所帮助。

Jeff Atwood为Stackoverflow开发的这个技术是我遇到过的最简单的方法。它依赖于ASP中内置的“缓存项删除”回调机制。NET的缓存系统

更新:Stackoverflow已经超越了这种方法。它只在网站运行时起作用,但这是一个非常简单的技术,对许多人都有用。

也可以看看Quartz。网

此外,如果你的应用程序使用SQL SERVER,你可以使用SQL代理来安排你的任务。这是我们通常放置重复出现的数据驱动代码(电子邮件提醒、定期维护、清洗等)的地方。SQL Agent内置的一个很好的特性是失败通知选项,它可以在关键任务失败时提醒您。

我发现这对所有参与者来说都很简单:

创建一个webservice方法,如DoSuchAndSuchProcess 创建一个控制台应用程序来调用这个webmethod。 在任务调度程序中调度控制台应用程序。

使用这种方法,所有的业务逻辑都包含在你的web应用程序中,但你有windows任务管理器的可靠性,或任何其他商业任务管理器来启动它并记录任何返回信息,如执行报告。使用web服务而不是发布到页面有一点优势,因为它更容易从web服务获取返回数据。