调度Web Api方法以设置间隔运行
本文关键字:运行 设置 Web Api 方法 调度 | 更新日期: 2023-09-27 18:03:45
在我目前的项目中,需要安排一个方法以设定的间隔运行,例如每周一次,目前这是通过创建一个HttpClient并击中所需的控制器方法的windows服务完成的。
我想知道是否有可能在Web Api项目本身中实现自动化,而不是使用外部服务。到目前为止,我还没有找到任何关于这样做的文档。
抱歉没有一个代码样本工作,因为我还没有找到一个基础开始。
如果需要安排一个后台任务每周运行一次,可以使用FluentScheduler (NuGet链接)为您运行它。你可以这样做:
public class WeeklyRegistry : Registry
{
public WeeklyRegistry()
{
Schedule<WeeklyTask>().ToRunEvery(1).Weeks(); // run WeeklyTask on a weekly basis
}
}
public class WeeklyTask : IJob
{
public void Execute()
{
// call the method to run weekly here
}
}
Update新版本的FluentScheduler稍微改变了API。任务现在应该从IJob而不是ITask派生。
在Web Api中没有真正的方法来实现您想要的。Web api应该是无状态的。
理论上,你可以在你的web服务器上创建一个长期运行的任务来定期调用你的Api(或直接调用方法),最好的地方是把这样一个方法放在你的全局asax文件中的OnStart方法。然而,这个方法是在web服务器加载到应用程序域时运行的,当web服务器决定卸载你的应用程序时,任务将被杀死。因此,如果你不调用你的web服务器至少一次,你的任务将不会启动。如果你的web服务器没有被定期访问,你的任务将被杀死。
拥有一个外部可靠的资源,比如你的服务,仍然是最好和最安全的方法。
这不是您希望Web API做的事情,我也不认为它能做到。关于单一责任。
服务方法有什么问题?
我不是说这是最好的方法,但它对我来说很有效,而且很容易。
我们的WebApi已经到位,我需要一个快速的解决方案,每小时调用一次API。我使用node.js并编写了几行利用moment.js库的代码。有一个定时器/倒计时功能可用。我将它设置为每小时触发一次,并调用我们的API。在IIS上运行。这是我以前的雇主写的,否则我会把实际的代码贴出来。
这很容易,而且有效。希望能帮到别人。 node . js + moment.js 图书馆。