如何在.net core中安排方法?

时间:2018-08-12 16:58:00

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

我必须从该Helper方法调用Web API,该方法会将所需的数据转储到数据库中。

  

我想创建一个方法,该方法每次都会自动调用   小时。

如果需要,我是否需要从Startup CS文件中调用它?

  

预期的方法将假定调用API来获取数据   将按小时的方式转储到SQL数据库中。

4 个答案:

答案 0 :(得分:2)

为此,我强烈建议使用Hangfire。 https://www.hangfire.io/

答案 1 :(得分:1)

这取决于您要执行的操作以及使用的操作系统。
如果使用Linux,则可以使用OS调度程序-cron。或AnaCron。
如果您使用Windows,则可以使用Windows任务计划程序。
Cron可能也可以在MacOS上工作,尽管我认为它们具有自己的任务计划程序。
如果您在Azure / AWS / DigitalOcean / AppEngine上使用应用程序,则它们都可能具有执行此操作的功能。

.NET中有一个用于执行作业调度的库,称为Quartz
我不知道他们是否已经移植到.NET Core,但我想他们已经移植了。

此外,如果您在ASP.NET(核心)应用程序中使用应用程序,则我不知道IIS在闲置20分钟后回收应用程序池是怎么回事。如果是这样,则您将无法在ASP.NET中执行此操作,或者您需要更改应用程序或IIS的配置。
注意:根据this的说法,即使IIS只需要回收反向代理,IIS回收应用程序池时ASP.NET Core应用程序肯定会停止。

我们过去做过的一种方法是在应用程序中使用ashx处理程序,该处理程序执行一次操作(使用JWT标头身份验证,因此不可能使用DOS / DDOS)。

然后,我们只有一个运行在某个地方的程序,该程序每小时向ashx处理程序发出一次get请求。这样可以确保任务每小时运行一次,并允许IIS回收应用程序池。因为这意味着IIS可能需要然后启动整个应用程序,所以您应该相应地增加get请求的超时。该系统很简单,并且在任何地方都可以使用,无论是开发机,内部部署,自托管,共享托管,azure,aws,appengine,digitalocean等,它甚至都不需要任何库。

最重要的是,您可以使用wget和cron,这是最简单的形式,它非常简单,并且您可以执行相当复杂的操作,例如,在每月的最后一天运行程序(28,29 ,30,31)在01:05,或者像每月的第一个星期五一样,或者在每个周一至周六的4点至23点,从13:04开始的每13分钟,或者您想要的任何地狱。

作业调度完全需要零.NET编程。

答案 2 :(得分:0)

这取决于几件事,特别是托管应用程序的位置(azure,aws,prem和本地),以及如何将调度程序耦合到Web api服务。 例如,假设您托管在天蓝色。您可以使用每小时安排的天蓝色计时器触发和调用端点。 AWS具有类似的功能,您可以调用lambda函数。 如果您正在准备中,则可以创建诸如hangfire之类的服务来进行调度。 而且,如果您确实希望手动运行计划,则甚至可以使用每小时调用一次的Timer和TimerCallback创建WCF服务。

答案 3 :(得分:0)

您可以在应用程序中设置调用该方法的Web挂钩,并在Azure中创建一个逻辑应用程序,该应用程序每小时触发一次以调用该Web挂钩。