首页 新闻 会员 周边 捐助

asp.net core中如何以最低的开销检查数据库连接是否正常

0
悬赏园豆:100 [已解决问题] 解决于 2018-02-08 10:01

阿里云服务器有时会出现由于dns解析问题造成的短暂不能访问数据库服务器(RDS)的问题

System.Data.SqlClient.SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible.

请问有什么开销最低的方式可以检查数据库连接是否正常?这样可以通过负载均衡的健康检查及时发现,不影响应用的正常运行。

dudu的主页 dudu | 高人七级 | 园豆:29570
提问于:2018-02-07 12:45

或者建立一个连接, 定期执行一个语句,来检测连接是否被中断

风云力 6年前
< >
分享
最佳答案
0

connection.open();

收获园豆:100
DiggingDeeply | 菜鸟二级 |园豆:338 | 2018-02-07 13:52

这的确是开销最低的方式,采用这种方式的实现如下:

public static class HealthCheck
{
    public static IApplicationBuilder UseHealthCheck(this IApplicationBuilder app, string connectionString) 
    {
        if (app == null)
            throw new ArgumentNullException(nameof(app));

        using (var conn = new SqlConnection(connectionString))
        {
            conn.Open();
        }

        app.UseWhen(
            context => context.Request.Path.Value == "/health",
            builder => builder.Run(async context =>
            {
                using (var conn = new SqlConnection(connectionString))
                {
                    await conn.OpenAsync();
                }
                await context.Response.WriteAsync("Ok");
            }));

        return app;
    }
}
dudu | 园豆:29570 (高人七级) | 2018-02-08 10:00
其他回答(1)
0

其实就是数据库连接池的 validate 机制。 这个可以参考 各种数据库连接池组件

风云力 | 园豆:541 (小虾三级) | 2018-02-07 15:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册