繁体   English   中英

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

[英]Run a task schedule within asp.net application?

我有一个asp.net应用程序,需要调用API非常5分钟才能从服务器获取最新数据。 当前,我们计划1)构建一个控制台应用程序,然后使用Windows Server Task Scheduler对其进行调度; 或2)为此构建Windows服务。

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

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

谢谢

从.NET 4.5.2开始,有一个QueueBackgroundWorkItem API,该API可让您创建自己的重新发生的任务实现( 有关详细信息和示例,请参见此处 ),但是我建议您看一下一些可用的,更流行的开放源代码库。 最受欢迎的是hangfire.io

通过Nuget( PM> Install-Package HangfirePM> 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的真正优点还在于它具有完善的报告功能,可让您监视自己的任务:

在此处输入图片说明

您可以在此处查看报告信息中心的更多屏幕截图。

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

这是一篇有关在ASP.NET中重复执行后台任务的危险的文章 ,其中包括有关如何执行此任务的示例。 最好使用诸如Hangfire之类的库来避免自己做。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM