【问题标题】:How to use Webjob to call method in WebApp in Azure如何在 Azure 中使用 Webjob 调用 WebApp 中的方法
【发布时间】:2020-04-06 00:10:58
【问题描述】:

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

还有如何通过webjob程序访问webapp wwwroot?

【问题讨论】:

  • WebJob 是一个单独的项目,它发布到您的 Web 应用服务中的一个特殊位置。当您说“我如何使用 webjob 来调用 webapp 中的方法”时,您是否只是想在 WebJob 的上下文中重用逻辑/服务?还是您实际上是在尝试调用正在运行的 Web 应用程序上的方法(如 RPC 样式)?
  • 感谢您的回答 Bryan。我以为你可以从 webjob project 调用 Webapp 方法。基本上我需要每小时从 api 更新数据库。我正在考虑用计时器制作方法,它会每小时调用一次方法,但人们说从长远来看它并不好。所以现在我正在考虑在 webapp 中创建特殊路线,并且在 webjob 控制台项目中每小时输入一次链接。有没有更好的解决方案?

标签: azure asp.net-core model-view-controller web-applications cron


【解决方案1】:

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

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

第二个选项的代码非常简单,类似于:

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 的上下文中运行,而是允许单独管理它——如果这可能是一个好处的话。只是一个想法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-23
    相关资源
    最近更新 更多