问题标签 [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 回答
6923 浏览

c# - .Net core Hosted Services 保证完成

我正在查看 .Net-Core 2.1 新功能Hosted Services,我发现它们与QueueBackgroundWorkItem的建模非常相似

队列后台工作项似乎有一个限制,即任务必须在 90 秒内执行

AppDomain 关闭只能延迟 90 秒(实际上是 HttpRuntimeSection.ShutdownTimeout 和 processModel shutdownTimeLimit 的最小值)。如果排队的项目太多以至于无法在 90 秒内完成,那么 ASP.NET 运行时将卸载 AppDomain 而无需等待工作项目完成。

托管服务是否有不同的行为,或者此限制是否仍然适用?

我担心如果我在我的托管服务上排队,如果它是一个运行时间很长的任务,它是否仍能保证完成?

0 投票
1 回答
13110 浏览

c# - .NET Core 中托管服务的集成测试

我有一个我想测试的 QueueTask 托管服务(.NET Core 的新后台服务)。我的 queuedHosted 服务如下所示:

它只是从队列中读取任务并在它们进入时执行它们。我已经验证了托管服务正在生产中工作。我为它写了一个测试,如下所示:

但是,我的回调从未被击中。如何让我的任务在后台服务上执行?

编辑

我在模仿启动,并假设我的后台服务可以正常工作,但显然我的服务从未启动。

托管服务通常如何从 .NET Core 启动?

0 投票
2 回答
7793 浏览

c# - ASP.NET Core 中具有托管服务的并行队列后台任务

我正在使用 2.1 版中的 ASP.NET Core 托管服务功能对新的后台任务进行一些测试,更具体地说是队列后台任务,我想到了一个关于并行性的问题。

我目前严格遵循微软提供的教程,当尝试模拟一个工作负载时,同一用户发出多个请求以将任务排入队列,我注意到所有工作项都是按顺序执行的,因此没有并行性。

我的问题是,这种行为是预期的吗?如果是这样,为了使请求执行并行,是否可以触发并忘记,而不是等待 workItem 完成?

我已经搜索了几天关于这个特定场景的运气,所以如果有人提供任何指南或示例,我会非常高兴。

编辑:教程中的代码很长,所以它的链接是https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-2.1#queued -后台任务

执行工作项的方法是这样的:

问题的要点是知道是否有人可以分享如何使用这种特定技术同时执行多个工作项的知识,因为服务器可以处理这种工作负载。

我在执行工作项时尝试了 fire and forget 方法,它按照我的预期工作,同时并行执行多个任务,我只是不确定这是否是一个好的做法,或者是否有更好或更正确的方式来处理这种情况。

0 投票
2 回答
42174 浏览

c# - 在 ASP.NET Core 中注册 HostedService 的正确方法。AddHostedService 与 AddSingleton

在 ASP.NET Core 2.1 中注册自定义托管服务的正确方法是什么?例如,我有一个从BackgroundService派生的自定义托管服务,名为MyHostedService. 我应该如何注册?

或者

?

在这里我们可以看到第一种情况,但这里有第二种情况。

这些方法是否相同?

0 投票
1 回答
783 浏览

asp.net-core - .NET Core 托管服务超时

我已经开始使用 .NET Core 托管服务来处理一些发布/订阅功能。我计划使用取消令牌来关闭服务。我想知道他们是否有一些超时?如果服务没有被明确停止,我希望它永远运行。

感谢你的帮助。

0 投票
1 回答
15907 浏览

c# - .net 核心依赖注入到托管服务

我的 .net 核心应用程序需要在指定的时间间隔内抓取数据。我选择实现IHostedService与 API 并行运行它。托管服务需要注入一些服务。我在 中注册它们startup.cs,但出现错误:

System.InvalidOperationException:'不能从单例'Microsoft.AspNetCore.Hosting.Internal.HostedServiceExecutor'中使用范围服务'IXService'。'

我的startup.cs:

我在使用 DbContext 时遇到了类似的问题,我用https://stackoverflow.com/a/48368934/8475133解决了它,但是这次我需要通过更深层次的依赖注入并在每个中处理 IServiceScopeFactory 似乎不是一个优雅的解决方案。

0 投票
1 回答
812 浏览

.net-core - IHostedService 控制台应用程序中的 Application Insights

我正在尝试在控制台应用程序中启用 Application Insights IHostedService(目前,它是一个简单的控制台应用程序,我们作为 WebJob 运行,将来在容器中运行)。

据我所知,在以下代码中,到目前为止,我们没有任何扩展来将全局 Application Insights 注册为以下代码的实现ILogger

到目前为止,我发现可能我应该能够使用记录器的自定义实现来设置所有内容,即public class ApplicationInsightsLogger : ILogger,然后...将它注册到容器中,以便 DI 解决它。

这是正确的方向吗?

0 投票
2 回答
3854 浏览

c# - .NET 通用主机:防止应用程序因未处理的异常而崩溃

我有一个 .NET 通用主机,IHostedService它从 OPC-UA 接口接收事件并处理它们。

问题是,如果在处理一个事件的过程中发生了未处理的异常,整个应用程序就会崩溃

我阅读了文档,但没有找到有关全局异常处理程序或允许捕获未处理异常并防止应用程序崩溃的类似机制的任何信息。

是否有保护通用主机以及IHostedService防止未处理异常的解决方案?

编辑

我知道,这里最简单的事情是尝试/捕获异常而不是让它冒泡。但我想知道是否有类似 WinForms / WPF 中的机制,您可以在其中更全局地捕获此类异常并防止崩溃。

编辑

这是代码的简化版本:

在这个例子中,很容易在ProcessOpcEvent方法中添加一个 try/catch 块,但如果有一种机制可以避免在这种情况下完全应用程序崩溃,那就太好了。

0 投票
1 回答
495 浏览

asp.net-core - ASP.NET Core 应用程序中的后台服务

我有一个使用 ASP.NET Core 2.1 构建的 API,它执行一些基本的 CRUD 操作。

这是某种发布管道应用程序,专用于我们的内部流程。它的工作原理如下:

  1. 用户请求数据重新加载 (POST)
  2. 用户批准数据重新加载 (POST)
  3. 用户在数据库中启动 SSIS 包,这将触发数据重新加载 (POST)
  4. 后台进程检查该 SSIS 包的状态,并在完成时将重新加载的状态设置为完成/失败

我们最初的想法是创建一个后台服务,它会定期查询数据库并检查 SSIS 包的当前状态,然后将我们的实体更新为所需的状态(完成/失败)。

但是,这不起作用,因为所有其他服务都是范围内的,而后台服务是单例的。

为了保持我的实体的正确状态,运行该后台服务的替代方法是什么?一个单独的项目?

0 投票
0 回答
2503 浏览

c# - 如何在 asp.net core 2.0 IHostedService 中注入 autofac 依赖项

我正在开发 asp.net core 2.0 webapi 并想要一个后台任务来处理来自 kafka 消息总线的消息。我阅读了一些关于 IHostedService 的文档并创建了一个自定义后台服务。我正在使用 MediatR 实施 CQRS。

我已经在 Autofac 中注册了 MediatR 模块。我需要 Meditatr 对象在自定义托管服务中可用。谁能帮我实现这一目标?

autofac.json

Autofac模块:

程序.cs

公共类程序 { public static void Main(string[] args) { BuildWebHost(args).Run(); }

}

启动.cs

后台服务

谢谢