实施长 运行 服务(无限长/始终可用)以处理 ASP.NET 核心 Web Api 中的数据
Implementing a long running service (indefinite length / always available) to handle data in an ASP.NET Core Web Api
我将尝试简化它,
作为 ASP.NET Core Web Api (.Net Core 2.2) 的一部分,我正在努力实现无限期运行并处理比赛的出租车调度员后台服务 -> 将司机分配给比赛,不断获取该地区的新司机,并相应地从最近到最远分配给比赛(该服务读取和写入不同的 Sql 数据库表)。我将后台服务创建为托管服务,只要有可用的比赛,它就会执行上述所有操作,并在新的后台线程中处理每场比赛。 api 在 IIS 上的 ftp 服务器上运行。
问题: 一开始它工作正常,但有时服务会超时并且无法处理任何传入的比赛,我必须停止 api 和重新启动它,哎呀,这不是我想要的行为,因为我希望我的 xamarin-forms 应用程序能够响应并实时接收比赛。
在我编写服务后,我开始质疑我的实现,我遇到了像 后台工作者、微服务 和 Worker services..现在我更困惑于修复什么或如何解决问题,以及是否有更好的方法来解决这个问题。
我在 Web 中使用简洁的架构设计模式 Api。这就是我在 Program.cs 文件上注册后台服务的方式:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureServices(services =>
{
//Some workaround to use the hostedservice as an API
//see https://github.com/dotnet/extensions/issues/553
services.AddSingleton<BackgroundManagerService>();
services.AddSingleton<IHostedService>(p => p.GetService<BackgroundManagerService>());
})
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace); //LogLevel.Information
})
.UseNLog(); // NLog: Setup NLog for Dependency injection;
感谢帮助!
我 运行 在工作中使用 Hangfire 遇到过类似的问题。虽然您可以随意处理空闲超时和应用程序初始化程序(https://docs.hangfire.io/en/latest/deployment-to-production/making-aspnet-app-always-running.html 仅作为示例),但我们最终将所有内容都移到了 .NET Core Worker Service 中并将其托管为 Windows 服务。
这就是我建议的方法,效果很好。
我将尝试简化它,
作为 ASP.NET Core Web Api (.Net Core 2.2) 的一部分,我正在努力实现无限期运行并处理比赛的出租车调度员后台服务 -> 将司机分配给比赛,不断获取该地区的新司机,并相应地从最近到最远分配给比赛(该服务读取和写入不同的 Sql 数据库表)。我将后台服务创建为托管服务,只要有可用的比赛,它就会执行上述所有操作,并在新的后台线程中处理每场比赛。 api 在 IIS 上的 ftp 服务器上运行。
问题: 一开始它工作正常,但有时服务会超时并且无法处理任何传入的比赛,我必须停止 api 和重新启动它,哎呀,这不是我想要的行为,因为我希望我的 xamarin-forms 应用程序能够响应并实时接收比赛。
在我编写服务后,我开始质疑我的实现,我遇到了像 后台工作者、微服务 和 Worker services..现在我更困惑于修复什么或如何解决问题,以及是否有更好的方法来解决这个问题。
我在 Web 中使用简洁的架构设计模式 Api。这就是我在 Program.cs 文件上注册后台服务的方式:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureServices(services =>
{
//Some workaround to use the hostedservice as an API
//see https://github.com/dotnet/extensions/issues/553
services.AddSingleton<BackgroundManagerService>();
services.AddSingleton<IHostedService>(p => p.GetService<BackgroundManagerService>());
})
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace); //LogLevel.Information
})
.UseNLog(); // NLog: Setup NLog for Dependency injection;
感谢帮助!
我 运行 在工作中使用 Hangfire 遇到过类似的问题。虽然您可以随意处理空闲超时和应用程序初始化程序(https://docs.hangfire.io/en/latest/deployment-to-production/making-aspnet-app-always-running.html 仅作为示例),但我们最终将所有内容都移到了 .NET Core Worker Service 中并将其托管为 Windows 服务。
这就是我建议的方法,效果很好。