7

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

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

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

4

5 回答 5

4

为了简单起见,我会避免构建一个大型的单体 exe,并将要完成的工作分解为单独的任务,并为每个任务设置一个 Windows 计划任务。这样,您可以更轻松地维护代码库并在更精细的级别更改功能。

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

但老实说,如果你在截止日期前,我会应用 KISS 原则并为每个任务安排一个计划任务。

于 2008-12-20T06:32:44.053 回答
2

我会立即使用 Windows 服务。这将是满足您的需求的最可扩展的方法,创建服务不会增加您的开发时间,并且可能会在不久的将来为您节省时间。

于 2008-12-20T06:49:34.380 回答
2

我们使用 Windows 调度程序服务来启动小型控制台应用程序,该应用程序只是将参数传递给 Web 服务。

例如,如果用户有计划报告 #388 和 #88,计划任务将使用如下所示的命令行创建:

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

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

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

于 2008-12-24T23:08:39.610 回答
2

从预定的 EXE 而不是从网页内部进行操作的问题在于,这些操作可能会受益于,甚至完全需要网页将拥有的资源——IIS 缓存和 ORM 缓存是两件事我想到了。在 ORM 的情况下,在 Web 应用程序上下文之外进行数据库更改甚至可能是致命的。我的偏好是安排 curl.exe 从本地主机请求网页。

于 2010-07-15T15:01:26.053 回答
1

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

于 2008-12-20T06:31:29.953 回答