SQL Server 登录前握手
Posted
技术标签:
【中文标题】SQL Server 登录前握手【英文标题】:SQL Server Pre-Login Handshake 【发布时间】:2014-12-08 01:21:32 【问题描述】:我正在通过我的 ASP .NET 应用程序连接到 MSSQL 数据库,但有时我在打开连接时遇到此错误。
连接超时。尝试使用登录前握手确认时超时时间已过。这可能是因为登录前握手失败或服务器无法及时响应。尝试连接到此服务器所花费的持续时间是 - [Pre-Login] 初始化 = 3;握手=14996;
为了暂时解决这个问题,我必须重新启动 IIS。我正在使用此代码 sn-p 连接到 MSSQL:
using (SqlConnection connection = new SqlConnection(connectionString))
connection.Open();
/* my commands here */
connection.Close();
connection.Dispose();
SqlConnection.ClearPool(connection);
我在入站和出站规则中允许端口 1433,但没有更改。当我按照那里的说明进行操作时:
SQL Server Pre-Login Handshake Acknowledgement Error Connection to SQL Server Works Sometimes但没有任何改变。
【问题讨论】:
【参考方案1】:根据 MSDN 文档。
ClearPool 清除与连接关联的连接池。如果与连接关联的其他连接在调用时正在使用,它们会被适当地标记并在关闭时被丢弃(而不是返回到池中)呼唤他们。
你应该在connection.close之前使用ClearPool方法
参考:https://msdn.microsoft.com/zh-tw/library/system.data.sqlclient.sqlconnection.clearpool(v=vs.110).aspx
如果你使用 Using 语法来管理 Object 你不应该使用 connection.close 方法
因为它会在它们运行到 end 时调用。只需打开您的连接并执行您的命令
using (SqlConnection connection = new SqlConnection(connectionString))
connection.Open();
SqlConnection.ClearPool(connection);
/* my commands here */
SqlCommand cmd = new SqlCommand("your command",conn);
cmd.ExecuteReader()
参考示例:https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396
最后确保 SQL Server 网络配置正确
【讨论】:
有没有找到解决方案?尝试从远程 m/c 连接到 SQL 服务器时,我收到了类似的错误,但来自 SSMS(管理工作室)。 @Aamir 你检查你的防火墙设置了吗?如果您来自远程,您应该为 SQL Server 打开 1433(默认)端口 @KingJk 最初的问题是关于不可用的零星事件。防火墙要么总是工作,要么总是坏,不是吗?我也有同样的问题。偶尔在 Management Studio 中长时间握手。 (每周一次) @przemo_li 出现此问题时,我总是关闭防火墙。为了防止防火墙影响握手包发送。您可以跟踪 SQL 服务器日志 :) ref : msdn.microsoft.com/en-us/library/ms187109.aspx【参考方案2】:对我来说,诀窍是增加连接字符串的超时时间,因为当通过 *** 连接时,建立连接需要很长时间。您可以通过添加 ;connection timeout = value
来做到这一点当我在 *** 上连接应用程序尝试连接到 sql server 时,我遇到了同样的错误。
默认情况下,超时设置为 15 秒。
希望对你有帮助!
【讨论】:
以上是关于SQL Server 登录前握手的主要内容,如果未能解决你的问题,请参考以下文章
sql server进行远程连接出现这样错误:...登录前的握手期间发生错误
已成功与服务器建立连接,但是在登录前的握手期间发生错误。 (provider: SSL Provider, error: 0 - 等待的