我有一个asp.net应用程序需要在5分钟内调用API才能从服务器获取最新数据。目前,我们计划1)构建一个控制台应用程序,然后使用Windows服务器任务调度程序来安排它;或者,2)为此构建一个Windows服务。
是否可以在asp.net应用程序中执行此操作?如果是,怎么样?
我们只想看看那里是否有更好的解决方案。
感谢
答案 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来说,真正优秀的是它有一个非常优秀的报告功能,可以让你监控你的任务:
您可以看到reporting dashboard here的更多屏幕截图。
答案 1 :(得分:1)
ASP.Net实际上是为用户提供HTML用户界面。由于您需要的解决方案不需要用户界面,因此将其创建为ASP.Net应用程序会使安装和维护应用程序的工作变得更加困难。
Here is a post谈论ASP.NET中重复出现后台任务的危险,它包含了如何执行此操作的示例。 可能最好使用Hangfire等库来避免自己动手。
作为另一种选择,您甚至可以创建由任务计划程序启动的PowerShell脚本。