ADO.Net应用程序有时只能连接到本地网络上的另一台服务器。给定的连接尝试是成功还是失败似乎是随机的。连接使用以下形式的连接字符串:
Server=THESERVER\TheInstance;Database=TheDatabase;User
Id=TheUser;Password=ThePassword;
返回的错误为:
连接超时。尝试使用登录前握手确认时超时。
这可能是因为登录前握手失败或服务器无法及时响应。
尝试连接到此服务器时所用的持续时间是- Pre-Login initialization=42030;handshake=0;
.NET应用程序是一个执行以下代码的小型测试应用程序:
using (SqlConnection conn = new SqlConnection(cs))
using (SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM TheTable", conn))
{
conn.Open();
int rowCount = (int)cmd.ExecuteScalar();
}
TheTable很小,只有78行。
但是,在.NET应用程序收到此错误的同一台机器上,我可以使用SSMS和连接字符串中指定的用户Id/密码连接到THESERVER。
为什么从ADO.Net应用程序连接可能失败,但使用来自SSMS的相同凭据成功?
发布于 2013-03-19 07:34:30
结果是为THESERVER
的IPv4地址启用了TCP/IP,但没有为IPv6地址启用。
显然,一些连接尝试最终使用了IPv4,而另一些连接则使用了IPv6。
为两个IP版本启用TCP/IP解决了此问题。
SSMS工作的事实被证明是巧合的(最初的几次尝试大概使用了IPv4)。后来一些通过SSMS进行连接的尝试导致了相同的错误消息。
要为其他IP地址启用TCP/IP,请执行以下操作:
<
发布于 2016-02-12 11:51:02
我也遇到了同样的错误,与微软最新一轮的更新(2016年9月2日)可疑地一致。我发现SSMS连接没有问题,而我的ASP.NET应用程序却返回了"timeout period elapsed attempting the pre-login attempting“错误
我的解决方案是在连接字符串中添加一个30秒的连接超时,例如:
ConnectionString="Data Source=xyz;Initial Catalog=xyz;Integrated Security=True;Connection Timeout=30;"
在我的情况下,唯一受影响的连接是使用集成安全性的连接,并且我在连接之前模拟用户,其他使用SQL身份验证到同一服务器的连接工作正常!
两个测试系统(独立的客户端和Sql服务器)同时受到影响,导致我怀疑microsoft更新!
发布于 2015-04-15 20:35:50
我像Eric一样解决了这个问题,但做了一些其他的修改:
<
和
中打开
https://stackoverflow.com/questions/15488922
复制相似问题