Не удается использовать HealthCheckUI с исключением. Служба для типа HealthChecks.UI.Core.Data.HealthChecksDb не зарегистрирована.

Я использую веб-приложение .NET Core 3.1. Установлены следующие пакеты:

<PackageReference Include="Microsoft.AspNetCore.Diagnostics.HealthChecks" Version="2.2.0" />
<PackageReference Include="AspNetCore.HealthChecks.UI" Version="3.1.2" />

Внутри моего класса 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);

app.UseEndpoints(endpointRouteBuilder =>
{
    endpointRouteBuilder.MapControllers();

    endpointRouteBuilder.MapHealthChecks("/health");
    endpointRouteBuilder.MapHealthChecksUI(options =>
    {
        options.UIPath = "/healthui";
    });
}

К сожалению, как только мое приложение запускается, я получаю следующее исключение:

Необработанное исключение. System.InvalidOperationException: не было зарегистрировано ни одной службы для типа HealthChecks.UI.Core.Data.HealthChecksDb.
в Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService (поставщик IServiceProvider, тип serviceTypejection.DependencyExtensions.Dependency .ServiceProviderServiceExtensions.GetRequiredService [T] (провайдер IServiceProvider) в HealthChecks.UI.Core.HostedService.UIInitializationHostedService.InitializeDatabase (IServiceProvider sp) в HealthChecks.UI.CoreviceProvider sp) в HealthChecks.UI.CoreviceNosted HostedServiceExecutor.ExecuteAsync (обратный вызов Func`2, логическое throwOnFirstFailure) в Microsoft.AspNetCore.Hosting.WebHost.StartAsync (CancellationToken cancellationToken) в Microsoft.AspNetCore.Hosting. hostWebHostExynctensions, CancellationHosting. hostWebHostExynctensions, .Hosting.WebHostEx tensions.RunAsync (хост IWebHost, токен CancellationToken, String startupMessage) в Microsoft.AspNetCore.Hosting.WebHostExtensions.RunAsync (хост IWebHost, токен CancellationToken) в Microsoft.AspNetCore.Hosting.WebHostExtensions.WebHostExtensions.WebHostExtensions. .portal.api.Program.Main (String [] args) в C: \ Repos *** \ Program.cs: строка 26

Это исключение возникает только при использовании AddHealthChecksUI(). Я думаю, что API пытается сохранить данные, поэтому он ищет экземпляр HealthChecksDb (который является DbContext). Но почему AddHealthChecksUI() не регистрирует сам DbContext? А что я делаю не так?


person Marco Siffert    schedule 13.11.2020    source источник


Ответы (1)


Вам необходимо указать, где должны храниться данные HealthCheckUI. Вот пример с SQL Server:

services.AddHealthChecksUI().AddSqlServerStorage(Configuration.GetConnectionString("HealthChecks"));

Недавно добавленный пакет:

<PackageReference Include="AspNetCore.HealthChecks.UI.SqlServer.Storage" Version="3.1.2" />

Доступны разные поставщики, каждый из которых поступает из другого пакета Nuget. Дополнительную информацию можно найти здесь: https://github.com/Xabaril/AspNetCore.Diagnostics.HealthChecks#ui-storage-providers

person Arnaud Leclerc    schedule 20.11.2020