调度Web Api方法以设置间隔运行

本文关键字:运行 设置 Web Api 方法 调度 | 更新日期: 2023-09-27 18:03:45

在我目前的项目中,需要安排一个方法以设定的间隔运行,例如每周一次,目前这是通过创建一个HttpClient并击中所需的控制器方法的windows服务完成的。

我想知道是否有可能在Web Api项目本身中实现自动化,而不是使用外部服务。到目前为止,我还没有找到任何关于这样做的文档。

抱歉没有一个代码样本工作,因为我还没有找到一个基础开始。

调度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 图书馆。