如何使用asp web api处理后台和计划任务

时间:2015-11-13 01:06:47

标签: c# azure asp.net-web-api

我有一个saas web应用程序,使用在azure中托管的asp web api。我需要安排一些任务:

  1. 生成月度/年度结算

  2. 运行重复的sql脚本

  3. 通过电子邮件向用户发送每日摘要

  4. 关于我如何做到这一点的任何建议或指针?我应该创建另一个应用程序,还是可以在我的web api应用程序中托管它?

3 个答案:

答案 0 :(得分:0)

如果您想要一个可靠的任务安排,您可以根据您的选择应用时间间隔,我建议Quartz。 Quartz允许轻松,可管理且无CPU开销添加/编辑/删除/等计划任务。

答案 1 :(得分:0)

如果您想要简单的事情,可以使用System.Timers。 每小时运行一个示例,报告计时器是否正在滴答(即写入日志文件),如果是时间执行任务则触发任务:

bool ranDailyToday = false;
// Run every hour i.e.
Timer timer = new Timer(60 * 60 * 1000);
timer.Elapsed += OnTick;
timer.Start();

private static void OnTick(object source, ElapsedEventArgs e) {
    // report that timer is alive i.e. write into log file
    // check if it is time to run and run
    if (DateTime.Now.Hour == 12 && ranDailyToday == false) {
         RunDailyJob();
    }
    // etc for monthly and rest...
    // don't forget to reset ranDailyToday at new Date
}

private void RunDailyJob() {
     // daily job logic
     ranDailyToday = true;
}

// etc for monthly and rest...

您可以从应用程序的起点触发启动方法。

实际上在示例中检查今天是否每天运行并不重要,因为计时器只能在一小时内运行一次,但如果设置为10分钟,这将有所帮助。

另外,Quartz似乎也很简单:你可以从here得到一个简单的例子。我刚尝试过,效果很好。

答案 2 :(得分:0)

这就是Azure Web Jobs的用途 - running background tasks。它是运行Web API的Azure Web App的一项功能。您可以使用Azure Scheduler将其设置为计划作业。如何做到这一点也在我提供的链接中。