0

我正在运行以下代码...

using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["db-connection"].ConnectionString))
{
    connection.Open();
    var command = new SqlCommand("SELECT @@SERVERNAME",connection);

    using (var reader = command.ExecuteReader())
    {
        reader.Read();
        return reader[0].ToString();
    }
}

...作为返回此应用程序指向的数据库服务器名称的健全性检查。有两个数据库服务器(DB00 和 DB01),它们位于 HAProxy 后面,如果 DB00 不可​​用,HAProxy 会设置为故障转移到 DB01。

连接字符串如下所示:

    <add name="db-connection"
connectionString="User Id=USER_ID; Password=PASSWORD; Initial Catalog=the-database; Server=load-balancer.is.here,59281; Application Name=My.Application.Name;Min Pool Size=5;Max Pool Size=500;Connect Timeout=10;Connection Lifetime=29;" />

我们遇到的问题是这样的:

  • 我们故障转移到 DB01(目前通过编辑 HAProxy 配置,使 DB00 成为备份,然后重新加载 HAProxy)
  • SELECT 代码(这个问题开头的代码)现在应该返回 DB01 作为服务器名,但它没有,它仍然返回 DB00
  • 这意味着我们的 SQLConnections 似乎仍然指向错误的数据库
  • 问题一直存在,直到我们在托管代码的盒子上重新启动单声道进程
  • 现在健全性检查代码返回正确的服务器名称 - DB01

任何想法这可能是什么?这可能是单声道连接池问题吗?

根据要求编辑 HAProxy 配置:

1 global
2         maxconn 4096
3         daemon
4 
5 defaults
6         mode tcp
7         #mode http
8         contimeout      5000
9         clitimeout      50000
10         srvtimeout      50000
11 
12 
13 frontend blahblah
14         bind *:59283
15         mode tcp
16         default_backend sql-server-lockertest
17 
18 backend sql-server-lockertest
19         balance roundrobin
20         server james 10.0.10.217:1433 check maxconn 32 rise 3 fall 3 
21         server andres 10.0.10.226:1433 check maxconn 32 rise 3 fall 3 backup

问候,

詹姆士

4

1 回答 1

1

事实证明,Mono 还不支持连接字符串中的“Connection Lifetime”参数。

但我们只是修复了它并提出了一个拉取请求:

https://github.com/mono/mono/pull/517

于 2012-12-05T12:42:01.523 回答