连接到SQL Server有时工作
一个ADO.Net应用程序有时只能连接到本地networking上的另一台服务器。 给定的连接尝试成功或失败似乎是随机的。 连接使用以下格式的连接string:
Server = THESERVER \ TheInstance; Database = TheDatabase; User Id = TheUser; 密码= ThePassword;
返回的错误是:
连接超时已过期。 尝试使用login前握手确认时超时。
这可能是因为login前握手失败或服务器无法及时回应。
试图连接到这个服务器的时间是:[Pre-Login] initialization = 42030; 握手= 0;
.NET应用程序是一个小的testing应用程序,执行以下代码:
using (SqlConnection conn = new SqlConnection(cs)) using (SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM TheTable", conn)) { conn.Open(); int rowCount = (int)cmd.ExecuteScalar(); }
表格很小,只有78排。
但是,在.NET应用程序收到此错误的同一台机器上,我可以使用SSMS和连接string中指定的用户ID /密码连接到THESERVER。
为什么从ADO.Net应用程序连接失败,但从SSMS获得相同的凭据成功?
事实certificate,TCP / IP为IPv4地址启用,而不是为THESERVER
的IPv6地址THESERVER
。
显然有些连接尝试结束了使用IPv4和其他使用IPv6。
为两个IP版本启用TCP / IP解决了这个问题。
事实certificate,SSMS的工作原来是巧合的(前几次尝试使用IPv4)。 稍后一些尝试通过SSMS连接导致相同的错误消息。
为其他IP地址启用TCP / IP:
- 启动Sql Serverconfigurationpipe理器
- 打开节点SQL Servernetworkingconfiguration
- 左键单击MYSQLINSTANCE的协议
- 在右侧窗格中,右键单击“TCP / IP”
- 点击属性
- selectIP地址选项卡
- 对于每个列出的IP地址,确保“活动”和“已启用”均为“是”。
我刚刚出现了与最新一轮微软更新(09/02/2016)可疑alignment的错误。 我发现SSMS连接没有问题,而我的ASP.NET应用程序返回“尝试消费login前握手确认已过去的超时时间”错误
对我来说,解决scheme是在连接string中添加30秒的连接超时,例如:
ConnectionString="Data Source=xyz;Initial Catalog=xyz;Integrated Security=True;Connection Timeout=30;"
在我的情况下,唯一受影响的连接是使用集成的安全性,我在模拟用户之前连接,使用SQL身份validation的其他连接到同一台服务器工作正常!
2个testing系统(单独的客户端和Sql服务器)同时受到影响,导致我怀疑Microsoft更新!
我解决了像Eric这样的问题,但是还有一些其他的改变:
- 启动Sql Serverconfigurationpipe理器
- 打开节点SQL Servernetworkingconfiguration
- 左键单击MYSQLINSTANCE的协议
- 在右侧窗格中,右键单击“TCP / IP”
- 点击属性
- selectIP地址选项卡
- 对于每个列出的IP地址,确保“活动”和“已启用”均为“是”。
和
- 对于每个列出的IP地址,确保TCPdynamic端口是空的,并且TCP端口= 1433(或其他某个端口)
- 打开Windows防火墙并检查端口是否在传入连接中打开
连接到托pipe服务器时,我遇到了同样的握手问题。
我打开了我的networking和共享中心,并在我的无线networking连接上启用了IPv6。
我有同样的问题,尝试从Visual Studio连接到本地networking中的服务器(通过VPN),同时build立一个实体数据模型。
仅在连接string中将TransparentNetworkIp设置为false才能解决。 在VS添加连接向导中,您可以在高级选项卡中find它。
我通过启用IPv6并取消阻塞入站端口1433修复了Windows Server 2012和SQL Server 2012上的此错误。
我有同样的问题,通过打开/启用 SQL Serverconfigurationpipe理器中的端口1433和tcp / ip设置解决scheme,然后重新启动服务器
在以下情况下,通常会出现“连接超时过期”错误
- SQL Server数据库引擎的一个实例没有运行。
- SQL Server浏览器服务未运行。
- TCP / IP被禁用。
- 服务器名称input错误。
- 有networking问题。
- 数据库引擎实例的TCP / IP端口被防火墙阻止。
- 客户端和服务器未configuration为使用相同的networking协议。
要根据上述原因检查如何跟踪此错误,请检查连接超时已过期。 尝试使用login前握手确认时超时
在我的情况下,所有选项已经在那里。
通过增加Connection Time-out = 30来解决这个问题。
我做了SharePoint 2010到2013的迁移时遇到了这个问题。 我怀疑是因为数据库服务器位于防火墙的另一端,它不会路由IP6,而是尝试使用IP6,并在连接到数据库时失败。
我认为这个问题现在已经解决了。 错误似乎已经停止。 我所做的只是禁用了SharePoint Server上的networking适配器的IP6(通过取消选中)。
我有同样的问题,但我使用静态IP地址连接到远程数据库。 所以上述解决scheme都没有解决我的问题。
我没有为我使用的安全login添加适当的用户映射,所以我的解决scheme只是确保用户映射设置设置为访问我的数据库。
通过阻止/黑名单试图强制用户帐户的IP地址解决了这个问题。 检查您的SQL访问日志大量失败的login尝试(通常为'sa'帐户)。
在使用.NET Framework 3.5构build的可执行文件在最近安装了一些Windows更新(2017年8月7日的一周)后的大约一半时间内开始报告这些连接问题。
连接失败是由目标计算机上已安装的.NET Framework 4.7(Windows更新自动安装已启动)引起的 – https://support.microsoft.com/?kbid=3186539
卸载.NET Framework 4.7解决了连接问题。
显然,.Net Framework 4.6.1中有一个突破性的变化 – TransparentNetworkIPResolution根据文章更新连接string也解决了问题,无需回滚框架版本。