【问题标题】:MongoDb health check and healthCheck UI not working in asp net coreMongoDb 健康检查和 healthCheck UI 在 asp net core 中不起作用
【发布时间】: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


    【解决方案1】:

    所以你正在尝试使用应该通过 DI 插入的东西。 但我不确定是否需要 AddCheck 部分。

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

    services.AddSingleton(new MongoDbHealthCheck(config.DatabaseSettings.DatabaseConnectionString, config.DatabaseSettings.DatabaseName));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-03
      • 2021-11-18
      相关资源
      最近更新 更多