5

是否可以IHostedService在 ASP.NET Core 中仅在一个横向扩展的 Azure 应用服务实例上运行?或者解决方案是IHostedService在一个实例的自己的应用程序服务中运行它?

我有BackgroundService一个每天运行一次并通过电子邮件发送报告。当我的应用服务扩展到 2 个实例时,此服务将每天同时运行两次,从而导致发送两封相同的电子邮件。

我怎么解决这个问题?

4

1 回答 1

3

最好将事物分解为单独的应用程序,这里也是如此。如果您只需要托管服务的一个实例,则应将其拆分为一个单独的项目并部署一个实例。如果你将它部署在你的应用程序中,你的应用程序的每个实例都会有一个实例;没有办法,参考这个帖子

使用托管服务,您的网站的每个部署都有一个运行该托管服务的实例,如果您只想随时运行该“进程”的一个实例,这可能会成为一个问题。您可以通过创建自己的锁定机制来解决这个问题,但显然 webjobs 开箱即用。因此,您可以使用作为单例运行的 webjob来实现您想要的。请参阅有关ASP.NET Core 中的托管服务的文章。

于 2020-01-22T08:14:43.763 回答