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

c# - 后台服务/工作者不要垃圾收集

我需要一个 IHostedService 或“Worker Service”,但我遇到了一个有趣的难题,那就是垃圾收集器没有在“适当的”时间运行。相反,它只是不收集任何资源,导致应用程序的内存使用量增加,(在调试期间,根本没有发生 GC)。

我已经做了所有可以想到的事情,包括让我的所有任务都返回一些值,并尽可能使用 using 语句。还使用依赖注入抽象了几层,(以确保有多个位置应该与运行时通信,以表明它适合运行垃圾收集。

我唯一不是解决方案的“解决方案”是手动运行 GC.Collect();

结果是我的代码在没有手动触发 GC 的情况下会膨胀以最大化可用内存,但是,使用手动 GC 这可以运行数小时而不会显着改变资源使用情况


解决方案 使用本文中提到的设置:https ://dotnet.github.io/orleans/1.5/Documentation/Deployment-and-Operations/Configuration-Guide/Configuring-.NET-Garbage-Collection.html (已弃用)

更新链接:https ://docs.microsoft.com/en-us/dotnet/core/run-time-config/garbage-collector

0 投票
2 回答
3283 浏览

c# - 优雅地停止 ASP.NET Core Web App(从 Visual Studio 调试器中),一个与 IHostedService 相关的问题

我对 ASP.NET Core 完全陌生,所以我可能错过了 50 英里的东西,因为我在这上面花了 3 个小时却无济于事。

我在 VS 2017 中制作了一个 Web 应用程序,由 Kestrel 托管,在 IIS Express 下运行(当您创建一个新的 Web 应用程序时,这都是默认设置)。当我按下 F5 时,应用程序启动,我的 Chrome 浏览器打开,我看到了“hello world”式的输出。当我关闭此浏览器窗口时,应用程序终止。

现在,我需要在后台执行一些任务,并且我需要这些任务具有清理逻辑——我发现它IHostedService允许我这样做。

该文档指出:

当您注册 IHostedService 时,.NET Core 将分别在应用程序启动和停止期间调用您的 IHostedService 类型的 StartAsync() 和 StopAsync() 方法。

我已经做好了:

服务按预期启动,一切都很好。极其简单的东西。但它永远不会停止,至少不会优雅地停止。

当我关闭该自动启动的浏览器窗口时,我的应用程序也会随之关闭,但我的IHostedService服务中有此方法:

永远不会被调用。

我已经尝试过文档中提供的示例,但它表现出同样的问题——当我在 VS 中尝试时,清理工作从未完成。

我注意到来自名为“ASP.NET Core Web Server”的输出通道的特殊信息:

这显然是来自控制台的一些重定向,因为这个应用程序似乎首先是一个控制台应用程序。所以我想知道 VS 是否会通过看似对我隐藏控制台来阻止我优雅地关闭我的应用程序?

我还注意到一个小的 IIS Express 托盘图标,其中列出了我运行的所有应用程序,并且它有一个停止按钮,它似乎没有做任何事情。我假设 IIS Express 在这里只是充当某种代理。

我傻眼了,特别是因为我似乎是唯一一个有这个问题的人。

如何正确终止我的 Web 应用程序?

0 投票
2 回答
2641 浏览

logging - 环境变量中的 .NET Core 托管服务日志记录 LogLevel

我使用以下代码创建了一个托管服务:

...具有以下launchsettings.json.

我似乎无法让它出现在我的控制台中。:(

Logger.LogDebug("Hello debug");

我想修改和调整LogLevel纯粹的环境变量。我错过了什么吗?

0 投票
1 回答
784 浏览

c# - How to override Serilog logger in Autofac child scope?

I have a basic .NET Core Generic Host that uses Serilog and Autofac.

AppModule is an Autofac module where I register a IHostedService

This part looks complicated, but what I am trying to accomplish is to run MessageProcessingService (an IHostedService implementation) in an Autofac child scope so that I can override the resolved logger within the entire MessageProcessingService graph with some context specific information. There will be multiple MessageProcessingService instances and each requires a logger with unique context so that I can correlate log output.

I use AutofacHostedServiceScopeOwner to wrap MessageProcessingService in a child scope. There is probably a better way to do this, but it's the best I could come up with.

This is all working correctly, except the resolved logger does not contain the expected context properties. This makes me think that my override logic is wrong, but I'm not sure what else to try.

appsettings.json

0 投票
0 回答
148 浏览

asp.net-core - 是否可以在 WindowsService 中运行 IHostedService 实例?

我正在尝试将控制台应用程序转换为 Windows 服务。控制台应用程序是使用 IWebHostBuilder 创建的。在启动中,我注册了多个 IHostedService 单例。作为控制台运行时,应用程序启动得很好。

但是,如果我按照此处描述的步骤操作:https ://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/windows-service?view=aspnetcore-2.2并尝试启动应用程序作为 Windows 服务,它只会冻结,直到您收到典型错误:服务超时。

注释掉 Startup 中注册 IHostedService 实例的行就可以了,我可以让服务运行。

是否有任何技术限制阻止我们使用 IWebHostBuilder + IHostedService + Windows 服务?

0 投票
1 回答
111 浏览

azure - 当 AppService 计划自动扩展时,HostedService 是否会自动扩展?

我有一个在 Azure AppService 上运行的 .NET Core 应用程序。我还有一个托管服务与表交互并根据给定条件更新它。

当我的自动缩放规则启动并开始横向扩展 AppService 时,我发现其中一个实例的 CPU 使用率有所增加。

我的问题是,当新实例通过自动缩放进行预热时,HostedService 是否也会自动向外扩展。

0 投票
1 回答
2565 浏览

c# - ASP.NET Core - 如何检测我的 IHostedService 是否在运行时崩溃?我可以重新启动它吗?

我正在我的 ASP.NET Core 网站中实现定时后台服务,使用此博客文章中的代码作为模型。真正起作用的部分如下所示......

这工作正常,直到某些事情导致服务崩溃。显然,在生产应用程序中,您希望这不会发生,但实际上,我需要考虑这种可能性。

据我所知,框架创建并启动任务,而应用程序的其余部分对此一无所知。我可以检测IHostedService服务是否崩溃,我可以重新启动它吗?如果没有,我该怎么办?定期运行此程序对网站至关重要,因此我需要知道我可以处理任何问题。

0 投票
2 回答
5537 浏览

.net-core - .net core `IHostedService` 是否应该启动一个新线程

.net core BackgroundServiceorIHostedService的启动方法是异步的:

那么我应该在ExecuteAsync/StartAsync方法中编写所有逻辑,还是应该启动一个新线程并立即返回?

例如,以下哪两个是正确的实现?

1.

2.

语义上我认为第二种似乎是对的,但是如果有几个IHostedServices,它们可以与第二种形式并行运行吗?

编辑 1

我还编写了一个示例程序来说明托管服务本身并不是作为单独的线程运行的。

在我输入 a 之前,该消息"Waiting for signal.."不会被写入控制台q

0 投票
3 回答
346 浏览

c# - .NET Core 托管服务

我需要获得注册托管服务的参考:

它实现了接口IHostedService,并在 Web 应用程序启动时正确启动。

我需要在某些控制器中获取服务的引用并访问对象公共成员。

以下代码不起作用。xService一片空白。

0 投票
1 回答
696 浏览

iis - IIS 回收时是否调用 IHostedService.StopAsync()?

这个问题与在 IIS 上运行的 ASP.NET Core 2.2 应用程序有关,特别是在向 DI 容器注册IHostedService实例时。

我读到的每一篇关于IHostedService.StopAsync()的文章都只是谈论StopAsync()在主机“关闭”时被调用,但我想知道 IIS 回收时会发生什么。

我的问题:

1. StopAsync()IIS回收时调用?

2. 无论使用InProcess托管还是OutOfProcess托管,答案是否相同?(ASP.NET CoreInProcess从 2.2 版开始支持)