使用 HealthCheckUI 失败,出现异常“未注册类型‘HealthChecks.UI.Core.Data.HealthChecksDb’的服务”。

Mar*_*ert 7 c# asp.net-core-3.1 health-check

我正在使用 .NET Core 3.1 Web 应用程序。安装了以下软件包:

<PackageReference Include="Microsoft.AspNetCore.Diagnostics.HealthChecks" Version="2.2.0" />
<PackageReference Include="AspNetCore.HealthChecks.UI" Version="3.1.2" />
Run Code Online (Sandbox Code Playgroud)

在我的 Startup.cs 类中,我像这样注册我的 HealthChecks:

services.AddHealthChecksUI();
services.AddHealthChecks()
    .AddCheck("SQL Server", new SqlServerConnectionHealthCheck(connectionString), HealthStatus.Unhealthy)
    .AddCheck("Redis", new RedisConnectionHealthCheck(), HealthStatus.Unhealthy)
    .AddCheck("CRM", new CrmConnectionHealthCheck(), HealthStatus.Unhealthy)
    .AddCheck("DMS", new DmsConnectionHealthCheck(), HealthStatus.Unhealthy);
Run Code Online (Sandbox Code Playgroud)
app.UseEndpoints(endpointRouteBuilder =>
{
    endpointRouteBuilder.MapControllers();

    endpointRouteBuilder.MapHealthChecks("/health");
    endpointRouteBuilder.MapHealthChecksUI(options =>
    {
        options.UIPath = "/healthui";
    });
}
Run Code Online (Sandbox Code Playgroud)

遗憾的是,一旦我的应用程序启动,我就会收到以下异常:

未处理的异常。System.InvalidOperationException:尚未注册类型“HealthChecks.UI.Core.Data.HealthChecksDb”的服务。
在 Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider 提供程序,类型 serviceType) 在 Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider 提供程序) 在 HealthChecks.UI.Core.HostedService.UIInitializationHostedService.InitializeDatabase(IServiceProvider sp)在 HealthChecks.UI.Core.HostedService.UIInitializationHostedService.StartAsync(CancellationToken CancelationToken) 在 Microsoft.AspNetCore.Hosting.HostedServiceExecutor.ExecuteAsync(Func`2 回调,布尔型 throwOnFirstFailure) 在 Microsoft.AspNetCore.Hosting.WebHost.StartAsync(CancellationToken CancellationToken) 在Microsoft.AspNetCore.Hosting.WebHostExtensions.RunAsync(IWebHost 主机、CancellationToken 令牌、字符串startupMessage)在 Microsoft.AspNetCore.Hosting.WebHostExtensions.RunAsync(IWebHost 主机、CancellationToken 令牌、字符串startupMessage)在 Microsoft.AspNetCore.Hosting.WebHostExtensions.RunAsync( IWebHost 主机、CancellationToken 令牌)位于 Microsoft.AspNetCore.Hosting.WebHostExtensions.Run(IWebHost 主机),
位于 C:\Repos***\Program.cs:line 中的 fzag.portal.api.Program.Main(String[] args) 26

仅当使用 时才会出现此异常AddHealthChecksUI()。我认为 API 正在尝试保存数据,因此它会搜索HealthChecksDb(这是一个 DbContext)的实例。但为什么不AddHealthChecksUI()注册 DbContext 本身呢?我做错了什么?

Arn*_*erc 5

您需要指定 HealthCheckUI 的数据应保存在何处。这是一个 SQL Server 的示例:

services.AddHealthChecksUI().AddSqlServerStorage(Configuration.GetConnectionString("HealthChecks"));
Run Code Online (Sandbox Code Playgroud)

新添加的包是:

<PackageReference Include="AspNetCore.HealthChecks.UI.SqlServer.Storage" Version="3.1.2" />
Run Code Online (Sandbox Code Playgroud)

有不同的提供程序可用,每个提供程序都来自另一个 Nuget 包。您可以在这里找到更多信息:https://github.com/Xabaril/AspNetCore.Diagnostics.HealthChecks#ui-storage-providers