【发布时间】:2019-07-12 19:21:36
【问题描述】:
我有一个简单的 asp.net 核心 web api,我想为 mongodb 添加健康检查,我有正确的 nuget 包和有效的连接字符串,我通过手动连接到数据库来验证。
问题是,当我导航到http://localhost:56103/health 时出现以下异常。 (我期待看到带有 mongodb 健康信息的 UI。)
An unhandled exception occurred while processing the request.
InvalidOperationException: Unable to resolve service for type 'System.String' while attempting to activate 'HealthChecks.MongoDb.MongoDbHealthCheck'.
三个问题:
1) 在设置健康检查和服务时我遗漏了什么?
2) .AddMongoDb( . . .) 是否初始化 IMongoClient ?它在做类似于services.AddSingleton<IMongoClient>(mongoClient); 的事情吗?
3) 我必须添加哪些配置才能获得类似的 UI (similar what is shown in this doc)
这是我正在使用的Startup.cscode 的一部分:
public IServiceProvider ConfigureServices(IServiceCollection services)
{
var config = Configuration.Get<Config>();
ConfigureMvc(services, config);
ConfigureDatabase(services, config);
ConfigureHealthChecks(services, config);
var containerBuilder = ConfigureDependencyResolver();
containerBuilder.Populate(services);
ConfigureLogger(containerBuilder, config);
_container = containerBuilder.Build();
return new AutofacServiceProvider(_container);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
//Middleware setups
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHealthChecks("/health", new HealthCheckOptions
{
Predicate = _ => true,
ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
})
.UseHealthChecksUI();
app.UseMvc();
}
private static void ConfigureHealthChecks(IServiceCollection services, Config config)
{
services.AddHealthChecksUI()
.AddHealthChecks()
.AddMongoDb(
config.DatabaseSettings.DatabaseConnectionString,
config.DatabaseSettings.DatabaseName,
null,
tags: null)
.AddCheck<MongoDbHealthCheck>("MongoDb Health Check", null,null);
}
private static void ConfigureDatabase(IServiceCollection services, Config config)
{
var dbConfig = config.DatabaseSettings;
var mongoClient = new MongoClient(dbConfig.DatabaseConnectionString);
var mongoDatabase = mongoClient.GetDatabase(dbConfig.DatabaseName);
services.AddSingleton<IMongoClient>(mongoClient);
services.AddTransient(context => mongoDatabase);
}
【问题讨论】:
标签: c# mongodb asp.net-core asp.net-core-webapi health-monitoring