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 本身呢?我做错了什么?
您需要指定 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