Eri*_* J. 91 sql-server ado.net
ADO.Net应用程序有时只能连接到本地网络上的另一台服务器.给定连接尝试成功或失败似乎是随机的.连接使用以下形式的连接字符串:
Server = THESERVER\TheInstance; Database = TheDatabase; User Id = TheUser; 密码= ThePassword;
返回的错误是:
连接超时已过期.尝试使用登录前握手确认时超时时间已过.
这可能是因为登录前握手失败或服务器无法及时响应.
尝试连接到此服务器所花费的时间是 - [Pre-Login] initialization = 42030; 握手= 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();
}
Run Code Online (Sandbox Code Playgroud)
TheTable很小,只有78行.
但是,在.NET应用程序收到此错误的同一台机器上,我能够使用SSMS和连接字符串中指定的用户ID /密码连接到THESERVER.
为什么连接可能会从ADO.Net应用程序失败,但是使用SSMS的相同凭据成功?
Eri*_* J. 90
事实证明,为IPv4地址启用了TCP/IP,但没有为IPv6地址启用TCP/IP THESERVER.
显然,一些连接尝试最终使用IPv4而其他人使用IPv6.
为两个IP版本启用TCP/IP解决了该问题.
SSMS工作的事实证明是巧合(前几次尝试可能使用IPv4).稍后通过SSMS进行连接的某些尝试导致相同的错误消息.
要为其他IP地址启用TCP/IP:
Sha*_*eon 27
我刚刚遇到了同样的错误,它与最新一轮的微软更新(09/02/2016)产生了可疑的结果.我发现SSMS连接没有问题,而我的ASP.NET应用程序返回"尝试使用登录前握手确认时超时时间"错误
我的解决方案是在连接字符串中添加30秒的连接超时,例如:
ConnectionString="Data Source=xyz;Initial Catalog=xyz;Integrated Security=True;Connection Timeout=30;"
Run Code Online (Sandbox Code Playgroud)
在我的情况下,唯一受影响的连接是使用集成安全性的连接,我在连接之前冒充用户,使用SQL身份验证的同一服务器的其他连接工作正常!
2个测试系统(单独的客户端和Sql服务器)同时受到影响,导致我怀疑微软更新!
Ren*_*iot 16
我像埃里克一样解决了这个问题但是还有其他一些变化
和
我遇到了同样的问题,尝试从Visual Studio连接到本地网络中的服务器(通过VPN),同时设置实体数据模型.
管理只能通过设置TransparentNetworkIPResolution=false连接字符串来解决.在VS添加连接向导中,您可以在"高级"选项卡中找到它.
| 归档时间: |
|
| 查看次数: |
152994 次 |
| 最近记录: |