问题标签 [asp.net-core-hosted-services]

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 投票
2 回答
5794 浏览

asp.net-core - api 不活动后,asp.net 核心托管服务休眠

我有一个托管服务,每分钟检查一个电子邮件帐户。我还将 MVC 与 Web API 2.1 一起使用。为了让我的托管服务启动,我必须通过调用 API 方法来“唤醒它”。在 Web API 一段时间不活动后,托管服务进入睡眠状态并停止检查电子邮件。就像它正在收集垃圾一样。如何让它连续运行?

协助将不胜感激。

启动.cs:

EmailReceiverHostedService.cs:

0 投票
2 回答
8375 浏览

c# - .NET Core 中用于 tcp 服务器的 IHostedService

我正在尝试使用 asp.net 核心构建一个小型 tcp 服务器/守护进程作为 Web 前端来与服务器交互。我发现 IHostedService/BackgroundService 似乎提供了一种将服​​务器和前端捆绑在一起的低成本替代方案。

目前代码看起来基本上是这样的(用于测试目的的回显服务器):

并在 Startup.cs 中初始化,如下所示:

现代 Asp.Net 核心应用程序和守护进程应该如何合作有一个共同的模式吗?

我将如何从 Controller 与正在运行的服务本身进行交互?

IHostedService 是否甚至可用于此目的,或者它是完全分离 Asp.Net 前端和服务/服务器的更好方法,例如通过使用某种 IPC 机制将守护进程和 asp.net 作为单独的进程运行?

0 投票
1 回答
616 浏览

c# - ASP.NET Core - 服务器按需停止和启动

我在运行 ASP.NET Core Web 应用程序时有一种奇怪的体验。我们公司有两个 dotnetcore Web 应用程序。目前这两个 web 应用程序都很少使用。IHostedService 也用于两者: https ://www.stevejgordon.co.uk/asp-net-core-2-ihostedservice

这两个 Web 应用程序都在某个时候停止运行,当用户通过 Web 浏览器访问该页面时,一切都恢复正常。用户没有遇到任何错误。有谁知道它为什么停止和启动?可能网络应用程序处于空闲状态,这就是它没有运行的原因。任何文档都会很有用。

0 投票
1 回答
2251 浏览

asp.net-core - 多个长时间运行的 IHostedSerivces 或 BackgroundService 实现

我似乎在这个问题上找不到太多。我遇到的问题是我需要运行 2 个以上长时间运行的后台服务,但只有第一个注册服务的 ExecuteAsync 被执行。我尝试通过 BackgroundService 实现它并将代码放在 ExecuteAsync 中,我尝试直接实现 IHostedService 并将长时间运行的代码放在 StartAsync 中。

我认为问题是 return Task.CompletedTask; 永远不会被调用。例如,我有两个 Kafka 消费者实现为 BackgroundServices 除了主题和 OnMessage 方法之外,代码看起来都相同

由于这两个服务都长时间运行,因此永远不会命中 Task.Complete。但是,如果我注释掉 while 循环,则两个服务 ExecuteAsync 都会被命中,而不仅仅是第一个注册的。

我找到了一种似乎可行的解决方法,但想知道是否有其他人有更好的方法。

基本上我重构代码让长时间运行的代码在一个名为 StartConsumer 的 void 方法中运行,然后让我的 ExecuteAsync 看起来像这样

两种服务都使用注册

0 投票
1 回答
1700 浏览

asp.net-core - ASP.NET Core 2.1 无法从托管服务访问数据库上下文

我正在用 asp.net core 2.1 编写一个包含托管服务的应用程序。原因是每隔一段时间我需要对数据库进行一些检查。

我遇到了一些问题。我无法在托管服务中注入数据库上下文,因为托管服务是单例服务,而数据库上下文是范围服务。

我试图通过创建一个额外的 Web API 来处理我需要做的事情并让我的托管服务在需要时调用该 API 来解决这个问题。这增加了一个公开 API 的问题,并且必须将绝对 URL 硬编码到我的托管服务类中,因为相对 URL 不起作用。

对我来说,这整件事感觉就像一个黑客。也许有更好的方法来实现我所需要的。因此,我在这里向某人寻求有关我的问题的最佳实践的建议。谢谢!

0 投票
1 回答
1683 浏览

c# - 定时器写入数据库的后台任务

如何在后台的计时器上写入数据库。例如,检查邮件并将新信件添加到数据库中。在示例中,我在写入数据库之前简化了代码。

Microsoft 示例中的类名。录音类本身:

定时器类:

启动:

似乎一切都像示例中那样完成,但没有任何内容添加到数据库中,不是吗?

0 投票
1 回答
2375 浏览

c# - 定期托管服务是否需要保持活动状态?

我创建了一个在 .Net-Core 中执行重复任务的托管服务。(我使用的是共享主机,所以我无法控制 iis)

我想确保此任务始终运行。但由于应用程序池回收等原因,不能 保证托管服务完成。

我对这个概念有点困惑。我现在的印象是托管服务仅在发出请求后在后台运行,并且一旦应用程序池被回收,后台任务就会被终止(例如,旧版本的 .net 限制为 90 秒)

编辑

我在我的 API 中对此进行了测试,它似乎在最后一次请求发出数小时后连续运行。注意:我在 IIS Express 中对此进行了测试,因此仍然不能保证行为。

如果是这种情况,并且没有向我的站点发出请求,我是否仍然可以保证我的 SchedulerService 将运行?

或者我应该让我的调度程序服务每 75 秒向自己发送一个请求,以确保新线程将重新启动调度程序?

0 投票
5 回答
12623 浏览

c# - 如何在没有 http 请求的情况下在 MVC Core 应用程序中启动 HostedService

在我的 MVC .NET core 2.2 应用程序中有 HostedService 做后台工作。

在 Startap 类的 ConfigureServices 方法中注册

由于这是独立于用户请求的后台服务,我想在应用程序启动时立即启动我的后台服务。现在是我的 HostedService 在第一个用户请求之后盯着的情况。

MVC Core 应用程序启动时启动 HostedService 的正确方法是什么

我的服务看起来像这样https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-2.2


看起来我根本无法盯着应用程序。

我的 porgram cs 看起来像

而且在第一次用户请求之前我没有遇到任何断点。我错过了什么吗,这是 VS2017 创建的默认 .Net Core 应用程序

这是我的starup.cs

0 投票
1 回答
1541 浏览

unit-testing - 在 .net core Ihostedservice 上编写单元测试的好习惯是什么?

我有一个在 .net core 2.0 启动时启动的后台任务,继承自 backgroundservice,实现 StartAsync、StopAsync 和 ExecuteAsync。这个任务是根据一些业务逻辑定期更新数据库表中的一些数据。

虽然我可以将后台任务作为应用程序运行并使用日志、数据库检查和其他工具进行测试,但单元测试对于测试后台任务是否是必要的?如果是这样,如何将任务注册为具有依赖关系的服务并触发启动和停止方法来断言实际与预期?在测试基于计时器的 .net 核心 ihostedservice 后台任务时欣赏一些基本的示例单元测试方法。

这是我的基本测试开始,仅用于示例,但尚未完成。话虽如此,这只是一个想法,而不是确切的工作测试。这是需要社区帮助的内容。还可以添加更多断言,即 Assert.Verify()?

0 投票
0 回答
1878 浏览

c# - BackgroundService 结束他分配的任务后会发生什么?

按照文档,我实现了一个库,允许我的 web api 在后台创建和运行任务。基本上,我所做的是创建一个QueuedHostedService(继承自BackgroundService),其中包含要完成的任务并将其添加到队列中。然后通过同时运行这些任务(我想在不同的线程上)逐渐清空这个队列。下面是抽象类BackgroundService

我不知道的是,Task完成后究竟会发生什么?我需要做一些事情(比如使用 Dispose 方法)还是系统负责释放分配给后台线程的资源?

编辑我正在添加实现方法的类QueuedHostedService的实现ExecuteAsinc()