在我当前的项目中,需要安排一种方法以设定的时间间隔运行,例如每周一次,目前这是通过创建 HttpClient 并点击所需控制器方法的 Windows 服务完成的。
我想知道这是否可以在 Web Api 项目本身中实现自动化,而不是使用外部服务。到目前为止,我还没有找到任何关于这样做的文档。
很抱歉没有可以使用的代码示例,因为我还没有找到一个可以开始的基础。
在我当前的项目中,需要安排一种方法以设定的时间间隔运行,例如每周一次,目前这是通过创建 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
}
}
更新FluentScheduler的新版本稍微改变了 API。该任务现在应该来自 IJob,而不是 ITask。更新了我的示例以反映这一点。
在 Web Api 中并没有真正实现您想要的方法。Web API 无论如何都应该是无状态的。
理论上,您可以在 Web 服务器上创建一个长时间运行的任务来定期调用您的 Api(或直接调用该方法),放置此类方法的最佳位置是全局 asax 文件中的 OnStart 方法。但是,当 Web 服务器加载到应用程序域时会运行此方法,并且当 Web 服务器决定卸载您的应用程序时,该任务将被终止。因此,如果您至少一次不调用您的 Web 服务器,您的任务将不会启动。如果您的网络服务器没有定期访问,您的任务将被终止。
拥有外部可靠资源(例如您的服务)仍然是最好和最安全的方法。
这不是您希望 Web API 做的事情,我不认为它会做。关于单一职责的一些事情。
服务方式有什么问题?您可能还想看看 Windows 任务计划程序。
我并不是说这是最好的方法,但它对我有用,而且很容易。
我们的 WebApi 已经到位,我需要一个快速的解决方案来每小时调用一次 API。我使用了 node.js 并编写了几行代码来利用 moment.js 库。有一个计时器/倒计时功能可用。我将它设置为每小时触发一次并调用我们的 API。让它在IIS上工作。这是在我以前的雇主那里,否则我会发布实际代码。
这很容易,而且很有效。希望它可以帮助某人。 node.js + moment.js库。