在我目前的项目中,需要安排一个方法以设定的间隔运行,例如每周一次,目前通过Windows服务创建一个HttpClient并点击所需的控制器方法。
我想知道这是否可以在Web Api项目中自动化,而不是使用外部服务。到目前为止,我还没有找到任何关于这样做的文档。
抱歉没有代码示例,因为我还没有找到可以开始的基础。
答案 0 :(得分:11)
如果您需要安排每周运行一次后台任务,可以使用FluentScheduler(NuGet 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 库。