首页 > 解决方案 > 如何在 Azure 中使用 Webjob 调用 WebApp 中的方法

问题描述

我需要在 Azure 上发布的 Web 应用程序(aspnet 核心 MVC)中每小时调用一次方法。基本上,Azure 提供了在“webapp 上下文”中创建 webjob 的机会。如何使用 webjob 调用 webapp 中的方法。据我了解 webjob 我需要创建单独的项目然后部署它,但是我可以链接参数或从 webjob 调用方法吗?

另外如何使用 webjob 程序访问 webapp wwwroot?

标签: azureasp.net-coremodel-view-controllerweb-applicationscron

解决方案


根据您的评论,我会推荐两个选项之一。第一个是如果您只需要更新数据库,并且执行该更新的任何逻辑都可以轻松包含在 WebJob 本身中,然后只需将 WebJob 作为 cron 进程运行,直接连接到 WebJob 中的数据库,然后执行从那里更新。如果此数据库更新不依赖于正在运行的 Web 应用程序的任何状态或信息,这是最佳选择。

如果你想真正通过 WebApp,那么你的想法是在 webapp 上创建一个路由/端点(以某种方式保护它!)调用你必要的方法,然后让你的 WebJob 使用 HttpClient 发出 Web 请求每小时到那条路线。

第二个选项的代码非常简单,例如:

public static async Task UpdateTimer(["0 0 * * * *")] TimerInfo myTimer, ILogger log)
{
   log.LogInformation($"Timer Invoked: {DateTime.Now}");
   var httpClient = new HttpClient();
   await httpClient.GetAsync("https://my.url.com/special-route");            
}

这两个选项实际上也不一定是 WebJob。它们也可以作为单独的 Azure 函数运行,其工作方式类似于 WebJob,但实际上并不在 WebApp 的上下文中运行并允许单独管理它——如果这可能是一个好处的话。只是一个想法。


推荐阅读