有时连接到SQL Server Works

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:

  • 启动Sql Server配置管理器
  • 打开节点SQL Server网络配置
  • 左键单击MYSQLINSTANCE的协议
  • 在右侧窗格中,右键单击"TCP/IP"
  • 单击属性
  • 选择"IP地址"选项卡
  • 对于每个列出的IP地址,确保"活动"和"已启用"均为"是".

  • 我不确定被禁用的单个条目是一个问题,因为协议选项卡有一个覆盖'listen all',它告诉SQL监听所有IP.有关文档,请参阅以下链接.https://msdn.microsoft.com/en-us/library/dd981060.aspx (4认同)

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服务器)同时受到影响,导致我怀疑微软更新!

  • 我也遇到了同样的问题,感谢解决。我通过 VPN 使用集成安全性进行连接,并将默认连接超时从默认的 15 秒增加到 30 秒,解决了我的问题。 (2认同)

Ren*_*iot 16

我像埃里克一样解决了这个问题但是还有其他一些变化

  • 启动Sql Server配置管理器
  • 打开节点SQL Server网络配置
  • 左键单击MYSQLINSTANCE的协议
  • 在右侧窗格中,右键单击"TCP/IP"
  • 单击属性
  • 选择"IP地址"选项卡
  • 对于每个列出的IP地址,确保"活动"和"已启用"均为"是".

  • 对于每个列出的IP地址,请确保TCP动态端口为空,TCP端口= 1433(或其他某个端口)
  • 打开Windows防火墙并检查端口是否在传入连接中打开


mao*_*ozx 9

我遇到了同样的问题,尝试从Visual Studio连接到本地网络中的服务器(通过VPN),同时设置实体数据模型.
管理只能通过设置TransparentNetworkIPResolution=false连接字符串来解决.在VS添加连接向导中,您可以在"高级"选项卡中找到它.

  • 设置为TransparentNetworkIPResolution = False.这是.NET 4.6.1的一项新功能,默认情况下处于启用状态.将此设置为false将删除此功能创建的500毫秒超时.有关更多信息,请访问:https://blogs.msdn.microsoft.com/dataaccesstechnologies/2016/05/07/connection-timeout-issue-with-net-framework-4-6-1-transparentnetworkipresolution/ (2认同)

Pom*_*ter 5

连接到托管服务器时,我遇到了相同的握手问题.

我打开了我的网络和共享中心,并在我的无线网络连接上启用了IPv6.

在此输入图像描述