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

asp.net - 具有不同配置的相同类型的多个托管服务?

我有一个我正在尝试为 ASP.NET 应用程序实现的服务,SomeService它是一种BackgroundService负责从消息队列中消费消息的实现。我想同时使用几个不同的队列,但延迟不同。例如:

我希望能够注册两个实例someService,一个用于queue1,一个用于queue2

configurations.ForEach(x=> services.AddHostedService<SomeService>(x)); 是否可以对使用自己的配置运行的每个服务实例执行类似操作 ?

0 投票
1 回答
811 浏览

c# - C# 在 asp.net 核心托管服务使用者中处理具有多个并行任务的 IAsyncEnumerable 项

我正在使用托管服务在 asp.net 核心应用程序中实现生产者-消费者。我能够让它工作到消费者_recordProcessingChannel.ReadAllAsync()同步处理项目的地步。

我正在尝试将结果拆分_recordProcessingChannel.ReadAllAsync()为几个并行任务。例如:我从频道读取了 10000 个项目,我想将这项工作分成 4 个单独的任务,每个 ICMService 处理 2500 个项目。

消费者:

读者:

预先感谢您提供的任何帮助

0 投票
2 回答
506 浏览

c# - 如果 IHostedService.StopAsync 方法的实现没有响应取消请求会怎样?

我们正在实现一个 .NET core 3.1 worker 服务,我们需要注册几个托管服务来实现所需的业务。

本文档说明IHostedService接口的StopAsync方法应该能够侦听默认 5 秒超时后发出的取消请求。

据我了解,StopAsync方法是在主机自身关机过程中被主机调用的。

在我们的一个托管服务中,我们需要在托管服务停止过程中调用异步方法;不幸的是,这个方法不支持取消,所以我们没有一个简单的方法来以正确的方式实现StopAsync方法。

这是我们的场景:

在这种情况下,主机级别会发生什么?

这种实现在任何方面都是“危险的”吗?

如果需要很长时间才能完成执行,这是否会阻止主机关闭过程StopAsync

这个问题最简单的解决方案是通过从BackgroundServiceMyHostedService基类 派生来实现 该类,但我想完全理解在主机级别长时间运行实现的可能含义。StopAsync

0 投票
1 回答
3286 浏览

c# - ASP .Net Core Queued 后台任务并行处理

我有一个 ASP .NET 核心 Web API,它使用 此处描述的排队后台任务。

我使用了提供的代码示例并添加了IBackgroundTaskQueue,BackgroundTaskQueueQueuedHostedService文章中描述的完全一样。

在我的Startup.cs中,我只注册了一个QueuedHostedService实例,如下所示:services.AddHostedService<QueuedHostedService>();

来自 WebApi 控制器的任务被排入队列,然后由QueuedHostedService.

我希望允许多个后台处理线程出列并执行传入的任务。我能想到的最直接的解决方案是QueuedHostedService在我的Startup.cs. 即,像这样:

我还注意到,由于 singal Semaphore in BackgroundTaskQueueQueuedHostedService实例并不是一直都在工作,而是只有在队列中有新任务可用时才会唤醒。

这个解决方案在我的测试中似乎工作得很好。

但是,在这个特定的用例中——它真的是一个有效的、推荐的并行处理解决方案吗?

0 投票
2 回答
7396 浏览

c# - 如何在具有不同计时器持续时间的.net核心的后台服务中运行多个任务

我正在创建一个将作为 Windows 服务运行的工作服务。我有一个要求,我想调用两个可能具有不同计时器的任务。

SayDoWork应该每 5 分钟调用一次,并且DoAnotherWork应该每 10 分钟左右调用一次。这两个任务可以并行运行,互不依赖。

我能够创建DoWork每 5 分钟运行一次的任务。我对如何实现另一个具有不同计时器持续时间的任务感到有点困惑?

0 投票
0 回答
68 浏览

asp.net-core - 如何在 Asp.net core 中创建类似 Windows 的服务?

在 Aspnet 核心中创建服务有不同的方法。IHostedService接口用于创建像Windows Service这样的服务。

在 WebApi 项目中使用IHostedService并将其部署为 Web 项目。一旦 API 项目启动,您的服务就会启动。

服务代码: 创建一个MyHostedService.cs类并将以下代码放入该类中。

班级

开始

停止

你的工作

启动.cs

0 投票
0 回答
231 浏览

c# - 无法在 appsettings.json 中绑定一些自定义配置

我有一个简单的HostedService,我正在尝试从appsettings.customs.json文件中读取一些强类型配置。以下是应用设置内容:

然后我添加.json文件并绑定配置,如下所示:

当我尝试Settings在服务中解析 ' 时,我只得到TrySetting' 的值,并且 'ApproveSetting由默认值初始化。似乎它只读取TrySetting,而不读取ApproveSetting.

如您所见,我已经尝试了两种Configure(Secion)方法Configure(t => ...Bind)。我还尝试更改.json文件中部分的位置。

你知道这里发生了什么吗?

更新:

ApproveSetting班级:

TrySetting班级:

更新2:答案:

最后我发现了问题。问题是我在两个不同的命名空间中有两个ApproveSetting和类。TrySetting我正在注册它们,namespace1并试图在namespace2. 所以,我的错。

0 投票
1 回答
4027 浏览

c# - C# 托管服务控制台应用程序的健康检查

我有 2 个托管服务,必须检查彼此的健康状况。如何在 C# 控制台应用程序(托管服务)中实现健康检查。检查托管服务的健康状况的参数是什么。

0 投票
0 回答
260 浏览

azure - 托管在 Azure 应用服务中的 .Net Core 的托管服务/后台服务正在停止

嗨,我已经面临这个问题好几天了。希望我能在这里找到一些解决方案。

我有一个 dotnet 核心应用程序,我在其中实现了 HostingService 以从数据库中获取一些记录并将其推送到石英触发器。

以下在 IIS 中运行良好,但部署到 Azure HostingService 时运行了几次迭代,一段时间后没有日志。

我一直在使用此链接中的示例。

我的 Execute 看起来像这样

我需要同时解雇很多工作,比如每天上午 10 点,这可以达到 10,000 多个。任何有关实施的建议,或任何设计缺陷(如果有)在当前实施中,或任何建议真的很感激。

我为此编写了另一个实现,这次我使用 Hangfire 每 1 分钟检查一次数据库记录。这似乎有一个问题,在 IIS 中也很有效,但在 Azure 中却没有。实现如下

已处理异常。

感谢您通读。第一次在 stackoverflow 上,如有必要,我可以添加更多我错过的信息。

环境:

  • 点网核心 v3.1
  • Azure 应用服务 Linux B1 层
0 投票
1 回答
3620 浏览

iis - 如何将 Blazor WebAssembly 核心托管自包含应用程序部署到 IIS

我开发了一个 Blazor WebAssembly 应用程序,它将在我们的 Intranet 上运行 Windows 2012 的服务器上使用。这是针对 .Net 5.0 Core Hosted and Self-Contained。我需要部署到 IIS 8.5 并且有一些问题。

当我在 IIS 中添加网站时,我是否指向具有可执行文件和 web.config 的根部署目录?我还需要做什么才能让 IIS 在 wwwroot 子目录中找到索引文件吗?将这个应用程序的部署目录直接放在inetpub下是否合适?发布任务创建了一个相当大的 BlaorDebugProxy 目录。这是为了发布,所以我不明白为什么要创建它。有没有办法防止这种情况发生?我想使用 ServerName\AppName 访问应用程序。如果我使用“AppName”作为主机名创建站点,这会起作用还是我需要做其他事情?当我尝试从 IIS 浏览到该站点时,我收到 500.19 '无法访问请求的页面,因为该页面的相关配置数据无效。我没有对文件进行更改,因为它是由发布过程创建的。这是:

任何想法为什么这不起作用?

请注意,这是使用自包含模型。此外,我已确保该目录已授予此应用程序的应用程序池标识的完全权限。

下面的答案和假设的重复都是指安装框架。但是,我认为自包含模型的全部意义在于它不依赖于已安装的框架。

我进行了广泛的搜索,看到许多涉及这些问题的参考资料,但没有具体说明如何让 IIS(尤其是旧版本)托管自包含模型。Microsoft 页面讨论了优点和缺点以及如何创建文件,但没有详细说明如何托管它们或我上面列出的其他问题。

有没有人成功做到这一点谁可以提供一些指导?

谢谢 !