您可以使用 Timer 类在 Azure 网站项目中运行调度程序。这样,您可以将所有内容封装在您的 ASP.NET MVC 项目中。
关于 Timer 类的信息:http: //msdn.microsoft.com/en-us/library/system.timers.timer (v=vs.110).aspx
我在 Azure 网站上的一个 MVC 项目中对此进行了测试,并且可以确认它可以工作。要进行此设置,请在 Global.asax.cs 的 Application_Start() 中启动计时器:
private Timer _timer;
protected void Application_Start()
{
_timer = new Timer(1 * 60 * 1000); // 1 minute
_timer.Elapsed += (sender, e) => ScheduledTask.Process();
_timer.Enabled = true;
// other code goes here
}
在我的示例中,计时器每分钟调用 ScheduledTask.Process()。这是我的 ScheduledTask 类的样子:
public class ScheduledTask {
public int Id { get; set; }
public DateTime Time { get; set; }
public static void Process() {
using (var db = new ApplicationDbContext()) {
db.ScheduledTasks.Add(new ScheduledTask {
Time = DateTime.Now
});
db.SaveChanges();
}
}
}
在 Process() 中,你可以做任何你想做的事情,但我只是在数据库中创建一个条目来测试它是否有效。我将让这个任务工作大约一天,你可以在这里看到结果:
http://contactmanager1.azurewebsites.net/ScheduledTask
更新
事实证明,这不是设置计划任务的最佳方式,因为当应用程序池超时(由于站点上的活动不足)时,此计时器会终止。当应用程序池再次启动时,计时器会自动再次启动,但对于低容量站点,这不是一个可靠的解决方案。