MongoDb健康检查和healthCheck UI在ASP网络核心中不起作用

问题描述 投票:1回答:1

我有一个简单的asp.net核心网络api,我想为mongodb添加一个运行状况检查,我具有正确的nuget包和有效的连接字符串,这些字符串是通过手动连接到db验证的。

问题是,当我导航到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.cs代码的一部分:

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
1个回答
1
投票

因此,您正在尝试使用应通过DI插入的内容。但是我不确定甚至还需要AddCheck部分。

无论如何,要解决此问题,您需要在DI中添加以下行:

services.AddSingleton(new MongoDbHealthCheck(config.DatabaseSettings.DatabaseConnectionString, config.DatabaseSettings.DatabaseName));
© www.soinside.com 2019 - 2024. All rights reserved.