我正在尝试使用 .NET Core 2.2 运行状况检查。
在
ConfigureServices
中,我注册了实现 Microsoft.Extensions.Diagnostics.HealthChecks.IHealthCheck
接口的类。
但是当我在
UseHealthChecks
方法中执行 Configure
扩展方法时,它会抛出错误:
public void Configure(IApplicationBuilder app)
{
app.UseHealthChecks("/hc"); // <-- Error in this line
// ...
System.InvalidOperationException:“尝试激活“Microsoft.AspNetCore.Diagnostics.HealthChecks.HealthCheckMiddleware”时无法解析类型“Microsoft.Extensions.Diagnostics.HealthChecks.HealthCheckService”的服务
在我的例子中,运行状况检查 UI 本身不会启动 .net core 3.1 Web API 应用程序并使其崩溃。
错误消息: 无法构建某些服务(验证服务描述符“ServiceType:HealthChecks.UI.Core.Notifications.IHealthCheckFailureNotifier Lifetime:Scoped ImplementType:HealthChecks.UI.Core.Notifications.WebHookFailureNotifier”时出错:无法解析类型的服务尝试激活“HealthChecks.UI.Core.Notifications.WebHookFailureNotifier”时出现“HealthChecks.UI.Core.Data.HealthChecksDb”。)
修复:添加任何UI存储提供程序。就我而言,我选择了 AddInMemoryStorage()
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
...
services.AddHealthChecks()
.AddDbContextCheck<PollDbContext>() //nuget: Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore
.AddApplicationInsightsPublisher(); //nuget: AspNetCore.HealthChecks.Publisher.ApplicationInsights
services.AddHealthChecksUI() //nuget: AspNetCore.HealthChecks.UI
.AddInMemoryStorage(); //nuget: AspNetCore.HealthChecks.UI.InMemory.Storage
...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
app.UseHealthChecks("/healthcheck", new HealthCheckOptions
{
Predicate = _ => true,
ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse //nuget: AspNetCore.HealthChecks.UI.Client
});
//nuget: AspNetCore.HealthChecks.UI
app.UseHealthChecksUI(options =>
{
options.UIPath = "/healthchecks-ui";
options.ApiPath = "/health-ui-api";
});
...
}
appsettings.json
"HealthChecks-UI": {
"DisableMigrations": true,
"HealthChecks": [
{
"Name": "PollManager",
"Uri": "/healthcheck"
}
],
"Webhooks": [
{
"Name": "",
"Uri": "",
"Payload": "",
"RestoredPayload": ""
}
],
"EvaluationTimeOnSeconds": 10,
"MinimumSecondsBetweenFailureNotifications": 60,
"MaximumExecutionHistoriesPerEndpoint": 15
}
您必须通过
AddHealthChecks()
扩展方法配置运行状况检查基础设施服务。例如:
public void ConfigureServices(IServiceCollection services)
{
services.AddHealthChecks();
}
另请参阅文档。
我遇到了类似的错误:“尝试激活‘Microsoft.AspNetCore.HealthChecks.HealthCheckMiddleware’时无法解析类型‘Microsoft.Extensions.HealthChecks.IHealthCheckService’的服务”
奇怪的是,这个错误似乎只在我安装了一些不相关的 nuget 软件包后才出现。卸载这些软件包后,错误仍然存在!
在这个红鲱鱼上浪费了几个小时后,我意识到我在之前的提交中的 Program.cs 中有一个重复的 app.UseHealthChecks() 调用。此后我已将所有 HealthCheck 逻辑移至 Startup.cs 中...或者我是这么认为的。