在asp.net应用程序中运行任务计划?

时间:2015-09-27 22:16:56

标签: c# asp.net asp.net-mvc

我有一个asp.net应用程序需要在5分钟内调用API才能从服务器获取最新数据。目前,我们计划1)构建一个控制台应用程序,然后使用Windows服务器任务调度程序来安排它;或者,2)为此构建一个Windows服务。

是否可以在asp.net应用程序中执行此操作?如果是,怎么样?

我们只想看看那里是否有更好的解决方案。

感谢

2 个答案:

答案 0 :(得分:3)

从.NET 4.5.2开始,有一个QueueBackgroundWorkItem API,允许您创建自己的reoccuring任务实现(see here for details and examples)但是我建议看看一些流行的和更成熟的开放源库可用。最受欢迎的是hangfire.io

通过Nuget(PM> Install-Package Hangfire)安装后,并使用ASP.NET MVC应用程序进行配置,如下所示:

public void Configuration(IAppBuilder app)
{
    GlobalConfiguration.Configuration.UseSqlServerStorage("<connection string or its name>");

    app.UseHangfireDashboard(); //optional
    app.UseHangfireServer(); 
}

您可以开始创建火灾并忘记计划,延迟或重复发生的计划,如下所示:

BackgroundJob.Enqueue(() => Console.WriteLine("Fire-and-forget"));
BackgroundJob.Schedule(() => Console.WriteLine("Delayed"), TimeSpan.FromDays(1));
RecurringJob.AddOrUpdate(() => Console.WriteLine("Daily Job"), Cron.Daily);

对于Hangfire来说,真正优秀的是它有一个非常优秀的报告功能,可以让你监控你的任务:

enter image description here

您可以看到reporting dashboard here的更多屏幕截图。

答案 1 :(得分:1)

ASP.Net实际上是为用户提供HTML用户界面。由于您需要的解决方案不需要用户界面,因此将其创建为ASP.Net应用程序会使安装和维护应用程序的工作变得更加困难。

Here is a post谈论ASP.NET中重复出现后台任务的危险,它包含了如何执行此操作的示例。 可能最好使用Hangfire等库来避免自己动手。

作为另一种选择,您甚至可以创建由任务计划程序启动的PowerShell脚本。