问题标签 [ihostedservice]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
283 浏览

c# - CTRL+C 上不调用 IHostedService 的 StopAsync

我正在构建一个 ASP.NET Web API (.NET 5)。除了拥有典型的控制器之外,我还希望有一个始终并行运行的后台作业。为此,我创建了一个托管服务:

我注册了它ConfigureServices

API 工作正常,MyHostedService实例运行正常。中的代码StartAsync启动了一个新线程。如果我不这样做,API 服务器根本不会开始监听。我注意到当我按下 CTRL+C 时应用程序几乎立即关闭。StopAsync永远不会写入日志。我希望以后能够进行一些清理StopAsync。我应该改变什么?

0 投票
1 回答
548 浏览

asp.net-mvc - MVC WebApp 上的 .NET 5 Scheduled IHostedService 或 BackgroundWorker

我的 Web 应用程序必须根据我的 .NET 5 MVC Web 应用程序上的一些用户生成数据每 1、2、7 天发送一些电子邮件。该应用程序非常复杂,因为它是 3 个门户网站一起运行并相互交互。

触发器很简单,例如:如果用户在 1 天内未完成此发票,则发送提醒邮件。如果用户没有收到反馈(并将其插入到我们的网络应用程序表单中并保存),则每 2 天发送一次邮件提醒。

等等....

通常我使用 Windows 服务来执行此操作,因为您可以轻松地在 C# 中建立一个控制台程序,安排它并忘记它。

这一次,我想尝试用我曾经在项目中看到但从未使用过的东西来做这件事:IHostedService(或 IHost)或 .NET 5 中的 BackgroundService。

既是为了学习新东西,也是为了让我可以通过依赖注入重用大部分数据库代码

我记录了自己一点,这就是我发现的:

Asp.Net - 使用 IHostedService 的计划任务

.NET Web 服务和 BackgroundWorker 线程

如何在 ASP.NET Core 2.1 中的计时器上运行 BackgroundService

调度程序后台服务中的异步计时器

关于依赖注入:

.net 核心依赖注入到托管服务 所以它有一些关于整个 Singleton 的事情要解决。

现在,这似乎有点不可靠,或者乍一看似乎是一个优雅的解决方案,但稍后会因神秘的行为和错误而导致大量的头发拉扯,并且存在很多问题。

  1. 这些服务的用例是什么?它们看起来更像是框架的一个花哨的插件,很少使用,因为它们明显的局限性阻碍了它们。
  2. 我应该尝试使用它们还是使用 Windows 服务(然后将我编写的所有数据库代码都带入其中)?
0 投票
1 回答
60 浏览

asp.net-core - 如何强制 Quartz 现在在 ASP.NET Core 中启动?

我有一个由 Quartz 在 ASP.NET Core 中安排的作业,每 15 分钟运行一次。

我想最初运行它(强制 Quartz 现在开始)。

我使用以下代码,但它最初不运行该作业并等待 15 分钟开始。

好像.StartNow()不行?

0 投票
0 回答
104 浏览

c# - .NET Core iHostedService 关闭 IIS

我在 IIS 上运行一个 .NET Core Web 应用程序,它每隔几分钟运行一个 Web 请求,这工作绝对正常,该应用程序检查数据库,如果时间已经过去,它会执行运行我的任务的 Web 请求。

我遇到的问题是,过了一段时间,应用程序停止了,我在事件日志上收到一条消息,“应用程序“Bla Bla Bla”已关闭。

我在 IIS 设置上更改了我的应用程序池,使其保持活动状态,“StartMode:AlwaysRunning”、“空闲超时(分钟):0”和“空闲超时操作:暂停”。

尽管如此,它似乎不时关闭。

我究竟做错了什么?

在此处输入图像描述

0 投票
0 回答
47 浏览

.net-core - 将 IHostedService 转换为微服务

我在一个单体应用程序中使用 .NET Core 5,它有许多影响性能的 IHostedServices,我想将它们全部转换为微服务。我找不到任何间隔自动运行的微服务示例。实现这一点的正确方法是什么?

编辑:

我想将我的应用程序与托管服务分开,我想创建另一个 .NET Core 应用程序来运行这些托管服务中的每一个。使用仅与托管服务一起运行的同一数据库创建一个干净的项目是否正确?

0 投票
0 回答
117 浏览

c# - 我应该何时使用 IHostApplicationLifetime.OnStarted 事件与 IHostedService.StartAsync?

我一直在调查我们使用 .NET 通用主机来托管控制台应用程序。与 ASP.NET Web 应用程序相比,这似乎是 .NET 的推荐模式,允许轻松使用 DI、日志记录、配置等,同时保持一致的 API。当我遇到这个来自 Microsoft 的示例时,我开始对它有所了解,该示例举例说明了 IHostApplicationLifetime 事件的使用:

我玩了一下,发现 .NET 广播应用程序正在启动的样板日志总是在我的 StartAsync 方法之后被记录。这让我想知道:对于这两种不同的模式应该用于何时以及用于什么用途(IHostApplicationLifetime.OnStarted 与 IHostedService.StartAsync)是否有任何一般性指导?似乎在文档中更多地讨论了实现 IHostedService,但对我来说,StartAsync 调用似乎发生在主机应用程序生命周期真正“开始”之前似乎很奇怪——因此有什么丢失/担心吗?

0 投票
1 回答
48 浏览

c# - 用于数据库更改的 IHostedService 永远挂起

我正在尝试在 Web api 中使用 SignalR 实现数据库更改通知。下面是 NotificationService.cs 的代码

我在下面的ConfigurationService AS 下 的 Startup.cs 中注册此服务services.AddHostedService<NotificationService>();

当我运行程序时,它永远不会启动并挂在下面的行。

我知道我需要重写这个方法,但不知道怎么写。任何帮助,将不胜感激。

0 投票
0 回答
42 浏览

c# - 如何在两个 Worker 服务之间传递数据

假设我有两个长期运行的自定义服务和两个在主机上注册的 WorkerService:

IServiceA 由 WorkerServiceA 解析和运行。

IServiceB 由 WorkerServiceB 解析和运行。

问题:

IServiceA 需要通知/传递一些数据给 IServiceB,以便它可以进一步处理它。

如何实现这样的通信?

0 投票
1 回答
31 浏览

.net-core - .Net Core BackgroundService for RabbitMQ.Client.Core.DependencyInjection - 无法使用其他服务或 MediatR 命令

我正在创建一个应用程序,使用 RabbitMQ.Client.Core.DependencyInjection 作为 BackgroundService 中的消息消费者。接收和反序列化消息正常工作,但是当我向 MediatR 发送命令时出现错误:

我的命令处理程序的构造函数在构造函数中创建 dbContext,在 BackgroundService 之外它可以正常工作。

我了解对于 BackgroundService,需要创建范围并从 ServiceProvider 获取服务:

但是我如何使用应用程序的其余部分,我将注入的服务用作单例?

我相信如果我以同样的方式调用构造注入的 dbContext 的服务类,也会发生同样的问题,这似乎不是 MediatR 的问题。

0 投票
0 回答
19 浏览

asp.net-core - 如何在 ASP.NET Core 中检查队列为空或队列后台服务中有多少项?

我想在 asp.net 核心中实现 QueueBackground 服务。

  1. 我需要检查队列是否为空?
  2. 如何计算队列中的项目?