问题标签 [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 投票
1 回答
55 浏览

c# - 注入 dbContext 时返回“找不到与给定参数匹配的构造函数”

语境

.NET 5 控制台应用程序使用 IHostedService 模式和 EntityFramework Core 5。

问题

dbContext 如下所示:

主机构建器是这样配置的:

...并且主机服务是这样构造的:

然后我有一个这样的 XUnit 测试:

测试抛出异常

Castle.DynamicProxy.InvalidProxyConstructorArgumentsException:无法实例化类的代理:WeatherManagerDataDownloader.WeatherDbContext。找不到与给定参数匹配的构造函数:

请注意,为了清楚起见,我已经简化了代码。我模拟其他注入 DataDownloader 的服务,但我不是在模拟 dBContext。编辑:我现在已经添加了完整的代码,因为有人指出,即使我的简化代码没有暗示,模拟似乎正在发生。

问题

为什么会发生此测试异常?正如我所看到的,模拟应该与传入的 dBContext 无关。

0 投票
1 回答
427 浏览

.net-core - .net core 3.1 HostBuilder 没有 RunAsServiceAsync 方法(IHostBuilder 不包含 RunAsServiceAsync 的定义)

我有 .net core 3.1 控制台应用程序,我想将它作为 Windows 服务运行,我的 program.cs 看起来像

.csproj 是

但是对于 RunAsServiceAsync() 错误就像“IHostBuilder 不包含 RunAsServiceAsync 的定义”一样

谁能指出我在哪里/我错过了什么?

0 投票
2 回答
379 浏览

c# - 在 IHostedService 中启动和停止任务

我创建了一个 ASP.NET 核心 API,但我不知道如何正确实现 IHostedService。我有几个“工人”类需要作为后台进程运行,所以我使用 IHostedService 来异步启动所有任务。

启动.cs:

背景服务.cs:

工人.cs

工人类似乎工作(基于日志),但 cancelationToken 没有,所以清理代码永远不会执行(似乎)。如何正确取消所有正在运行的任务并在 StopAsync 方法中等待它们完成?

(上面的所有代码都被简化了,它实际上包含 di 和错误处理,但这不相关)

0 投票
0 回答
32 浏览

c# - IhostedService 异常

实施 IHostedServices 后,我一直收到此异常。我不知道是什么原因造成的。有人可以帮忙吗?

{"ClassName":"System.Threading.Tasks.TaskCanceledException","Message":"任务被取消。","Data":null,"InnerException":null,"HelpURL":null,"StackTraceString":"在 Core_API.Services.HourlyService.ExecuteAsync(CancellationToken cancelToken)","RemoteStackTraceString":null,"RemoteStackIndex":0,"ExceptionMethod":null,"HResult":-2146233029,"Source":"System.Private.CoreLib" "WatsonBuckets":null}

0 投票
2 回答
632 浏览

c# - 在应用程序启动期间运行 IHostedService 函数,但只运行一次

run a function我只需要在once每次应用程序启动时(该函数检查Mongo collection我的数据库中的特定内容并插入我自己预定义的文档)。

IHostedService/BackgroundService似乎能够胜任这项工作。我只需要将服务注入到我的 Startup.cs 文件中。

但是,我想知道是否无论如何我可以优雅地完成这项任务,因为IHostedService它确实是为了实现更多的cron job(需要在一段时间间隔内运行的任务,比如每 30 分钟一次)。

谢谢你。

0 投票
0 回答
81 浏览

dependency-injection - 如何使用 Simple Injector 在 HostedService 计时器中注入取消令牌

我正在尝试创建一个控制台应用程序,该应用程序使用 Simple Injector 运行托管服务,我查看了generichostintegration中的示例。

现在我想更改IProcessor.DoSomeWork为一个async以取消令牌作为参数的函数,以便DoSomeWork可以取消:

我如何从HostedService

并以正确的方式配置容器

我对此有点意见。也许我想错了?

*** 更新 ***

这就是我最后所做的。我尽量保持简单。

托管服务

“伪”调度程序

0 投票
2 回答
100 浏览

c# - 在 C# 中,如何动态地将 T 传递给 services.AddHostedService()?

我有一个包含多个托管服务的网络服务。

我希望能够通过“appSettings.json”打开和关闭它们。

在“StartUp.cs”中,我填充了一个实例

StateOfUse这个枚举是:

每个属性对应一个托管服务。

回到StartUp课堂上,我添加了以下方法:

这会失败,因为MethodInfo methodInfo解析为 null,因此将在下一行引发异常。该方法IServiceCollection.AddHostedService<THostedService>()是一个静态方法,包含Microsoft.Extensions.DependencyInjectionpublic static class ServiceCollectionHostedServiceExtensions. (我不在nameof代码中使用,因为扩展方法不支持。:-()

是否可以通过泛型访问此方法?如果是这样,怎么做?

0 投票
2 回答
65 浏览

c# - ASP.NET Core 应用程序中的 IHostedService 错误 - 为什么对象已被释放?

我在我的服务器解决方案中创建了后台服务

并将其添加到 Startup.cs

我的目标是拥有一个后台服务,每 10 秒检查一次是否有超过允许的通知并删除它们。

但是当我运行应用程序时发生错误

“System.ObjectDisposedException:“无法访问已处置的对象。”

我怎样才能正确地实现这一点?

0 投票
2 回答
100 浏览

asp.net-core - asp.net core - 轮询其他有界上下文事件发件箱的长时间运行进程

我正在构建一个遵循 DDD 模式的应用程序,每个 AR 都将其事件发件箱保存到永久商店。该商店被对事件感兴趣的其他部分轮询。

整个应用程序是面向用户的,所以基本的基础设施是 asp.net web api。

现在,我想避免让我的域工件分布在不同的流程/基础设施选项中。例如,监听事件存储并在收到事件时执行逻辑的 Azure 函数。

将 Web api 和事件消费者放在同一个容器中似乎很方便。原因是域工件与 api 和事件消费者基础设施一起部署。

我读到这IHostedService可能是它的一种选择,因为它可以运行长时间运行的后台进程。

问题是,是否IHostedService适用于对事件发件箱做出反应的这种特定场景?还是我缺少一些重要的缺点和更好的基础设施选择?

0 投票
0 回答
20 浏览

c# - System.AggregateException 与 MessageHandler 和 IParser

我正在用 N 层架构编写我的 Telegram Bot。我问了关于访问处置上下文的问题并在这里得到了答案。我编写了 HostedService 类和 MessageHandler,但出现了一个新错误,无法解决。

托管服务类:

消息处理程序类:

启动配置方法:

您可以在我之前的问题中看到 BLL 和 DAL 注入。

当我从 Telegram 发送请求时,我收到以下错误:

System.AggregateException:“无法构造某些服务(验证服务描述符时出错“ServiceType:TelegramBot.WebApi.Handlers.MessageHandler Lifetime:Scoped ImplementationType:TelegramBot.WebApi.Handlers.MessageHandler”:无法解析服务类型'TelegramBot.BLL.Services.ParserService' 尝试激活'TelegramBot.WebApi.Handlers.MessageHandler'。)'

InvalidOperationException:尝试激活“TelegramBot.WebApi.Handlers.MessageHandler”时无法解析“TelegramBot.BLL.Services.ParserService”类型的服务。