Cod*_*ior 12 .net c# sql-server connection-string database-connection
在将此标记为重复之前,请完整阅读.
在我正在调试的项目中,我收到一个SqlException,说明如下:
附加信息:已成功与服务器建立连接,但在登录前握手期间发生错误.(提供者:SSL提供者,错误:0 - 等待操作超时.)
这发生在调试会话期间,前一个会话只在几秒钟之前执行而没有问题.自初始异常以来,我无法连接到此项目中的数据库服务器. SqlConnection.Open()方法调用抛出异常.
这不是我第一次收到这个.在此之前,我花了两个星期的努力,最终为它启动了微软的支持票.在那个例子中,事实证明连接字符串上的ApplicationName属性太长(我们使用的是完全限定的程序集名称)并缩短它可以缓解问题.
这一次,有
最后,我突发奇想,创建了一个新项目,其唯一目的是连接到同一个SQL服务器.我将连接字符串从非工作项目复制到新项目中并连接.是否存在某种每个项目的连接缓存?在Clean> Rebuild以及Visual Studio和Windows的重启中幸存下来的东西呢?
public SqlConnection OpenSqlConnection(string connectionString)
{
var conn = new SqlConnection(connectionString);
conn.Open();
_connectionString = connectionString;
var sb = new SqlConnectionStringBuilder(_connectionString);
_server = sb.DataSource;
_database = sb.InitialCatalog;
return conn;
}
Run Code Online (Sandbox Code Playgroud)
传入的连接字符串是从应用程序中其他位置的SqlConnectionStringBuilder输出的.连接字符串类似于:"Data Source=SERVER;Initial Catalog=DATABASE;Integrated Security=True;Connect Timeout=60"
所以这个问题继续困扰着我,看来这是我的家庭网络(我是一名远程开发人员)和通过 VPN 访问的工作网络的延迟所致。我对工作网络上的服务器的平均 ping 时间为 100 毫秒。
真正奇怪的是连接字符串几个月来都没有出现问题,然后突然停止了。当时,应用程序名称值类似于应用程序名称=“MyProgram.DAL.Culture=en,PublicKeyToken=1a1a1a1a1a1a1a1a,版本=1.0.0.0”。换句话说,一个完全限定的程序集名称。最终我将其更改为缩短的“MyProgram.DAL”类型名称,并且它再次工作。
几个月后,我再次被它困扰。我碰巧发现,如果我只是吃掉异常并等待几个滴答声,一切都很好。即使应用程序报告连接失败,它也会很乐意使用该连接。因此,我将方法更改为以下:
public SqlConnection OpenSqlConnection(string connectionString)
{
var conn = new SqlConnection(connectionString);
var retries = 10;
while (conn.State != ConnectionState.Open && retries > 0)
{
try
{
conn.Open();
}
catch (Exception)
{
}
Thread.Sleep(500);
retries--;
}
_connectionString = connectionString;
var sb = new SqlConnectionStringBuilder(_connectionString);
_server = sb.DataSource;
_database = sb.InitialCatalog;
return conn;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6177 次 |
最近记录: |