如何将长 运行 的 .NET Core 应用程序部署为应用服务?

How do you deploy a long running .NET Core application as an App Service?

我有一个模拟股票市场的应用程序。其中一部分生成价格变化并将它们发布给消费者,大约每秒发送 10 次大约 100 次价格变化。市场交易的第二部分接受订单,随机执行它们并异步将执行报告发送回价格变化的同一消费者。

我想把它放在应用服务上,但问题是:

  1. 我希望价格生成器立即启动并且 运行 持续。
  2. 订单执行只需要运行当订单发送(异步)且所有订单已执行或取消时。然后它可以关闭,直到收到另一个订单。

似乎我被迫进入了两个桶之一,但都不适用于我想做的事情。 Web 作业在 Windows 11 中似乎像服务一样工作。它将立即启动并 运行 直到您将其关闭,但它没有处理 ASP 的逻辑-型控制器。

只要我通过发布订单将其唤醒,作为应用服务部署就可以工作,但在我发送订单之前不会开始提供价格。

问题来了:如何将 .NET Core 应用程序部署为应用服务并使其自动启动(无需通过初始 HTTP 调用将其唤醒)?

根据您的描述,我建议您可以考虑将价格源修改为 .net 核心应用程序中的后台服务。后台任务可以作为托管服务来实现。托管服务是 class 具有实现 IHostedService 接口的后台任务逻辑。

它包含 StartAsync 方法。 StartAsync(CancellationToken) 包含启动后台任务的逻辑。 StartAsync 调用之前:

应用的请求处理管道已配置。 服务器启动并触发IApplicationLifetime.ApplicationStarted。

更多的细节,你可以参考这个article

此外,我建议您也可以将Azure web 应用程序的配置设置为alwayson。