我有一个在Windows服务器上运行的网站,我想添加一些执行各种职责的预定后台任务。例如,客户希望用户接收汇总网站上最近活动的电子邮件。
如果发送电子邮件是唯一需要执行的任务,我可能只会设置一个运行脚本以发送这些电子邮件的计划任务。但是,对于此特定站点,客户端希望执行各种不同的计划任务,其中一些始终运行,其中一些仅在满足某些条件时才运行。现在,他们已经给了我一些他们希望实施的初步内容,但我知道将来会有更多。
我想知道的是,如果有一个简单的Windows解决方案可以让我定义需要运行的任务,然后让每天运行一个计划任务并执行已定义的每个计划任务。批处理文件是最简单的方法,还是我可以使用其他解决方案?
答案 0 :(得分:4)
为了简化生活,我会避免构建一个巨大的单片exe并将工作分解为单个任务,并为每个任务执行Windows计划任务。这样,您可以更轻松地维护代码库,并在更细粒度的级别上更改功能。
稍后您可以构建一个Windows服务,根据计划为每个不同的任务动态加载插件。这对于未来的项目可能更具可重用性。
但说实话,如果你在截止日期前我会应用KISS原则并按照每项任务计划任务。
答案 1 :(得分:2)
我会在门外使用Windows服务。这将成为满足您需求的最具扩展性的方法,创建服务不会增加您的开发时间,并且可能会节省您的时间。
答案 2 :(得分:2)
我们使用Windows Scheduler Service启动只能将参数传递给Web Service的小型控制台应用程序。
例如,如果用户已安排报告#388和#88,则使用如下命令行创建计划任务:
c:\ launcher \ app.exe报告:388报告:88
当调度程序触发时,此应用程序只在Web服务上执行Web方法,例如,InternalService.SendReport(int id)。
通常,您已经在Web应用程序中提供了所有必需的业务逻辑。这种方法允许以最小的努力使用它,因此不需要使用可插拔模块等创建任何复杂的.exe或Windows服务。
答案 3 :(得分:2)
从预定的EXE而不是从网页内部执行操作的问题在于,操作可能会受益于网页可能拥有的资源,甚至是需要 - - IIS缓存和ORM缓存是我想到的两件事。对于ORM,在Web应用程序上下文之外进行数据库更改甚至可能是致命的。我的首选是安排curl.exe从localhost请求网页。
答案 4 :(得分:1)
使用Windows计划任务或创建自行执行计划的Windows服务。