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

时间:2013-03-13 11:00:21

标签: c# asp.net-web-api

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

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

抱歉没有代码示例,因为我还没有找到可以开始的基础。

4 个答案:

答案 0 :(得分:11)

如果您需要安排每周运行一次后台任务,可以使用FluentSchedulerNuGet link)为您运行它。你可以这样做:

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
    }
}

更新 FluentScheduler的新版本略微改变了API。该任务现在应该来自IJob,而不是ITask。更新了我的示例以反映这一点。

答案 1 :(得分:3)

Web Api中没有一种方法可以达到你想要的效果。无论如何,Web Apis应该是无国籍的。

理论上,您可以在Web服务器上创建一个长时间运行的任务来定期调用您的Api(或直接调用方法),放置此类方法的最佳位置是全局asax文件中的OnStart方法。但是,当Web服务器加载到app-domain时,将运行此方法,并且当Web服务器决定卸载您的应用程序时,该任务将被终止。因此,如果您未至少调用一次Web服务器,则不会启动任务。如果您的Web服务器无法定期访问,您的任务将被终止。

拥有外部可靠资源(例如您的服务)仍然是最好和最安全的方法。

答案 2 :(得分:2)

这不是您希望Web API执行的操作,我不认为这样做。关于单一责任的事情。

服务方法有什么问题?您可能还想查看Windows任务计划程序。

答案 3 :(得分:0)

我并不是说这是最好的方法,但是它对我有用,而且很容易。

我们的WebApi已经到位,我需要一个快速的解决方案来每小时调用一次API。我使用了node.js并编写了几行利用moment.js库的代码。有一个计时器/倒计时功能。我将其设置为每小时触发一次,并调用我们的API。它是否可以在IIS上运行。是在我以前的雇主那里,否则我会发布实际代码。

这很容易并且有效。希望它可以帮助某人。 node.js + moment.js 库。