SQL Server预登录握手

15

我通过ASP .NET应用程序连接到MSSQL数据库,但有时在打开连接时会出现以下错误:

连接超时。在尝试消耗预登录握手确认时,超时时间已过。这可能是由于预登录握手失败或服务器无法及时响应导致的。尝试连接到该服务器所花费的时间为 - [预登录]初始化=3;握手=14996;

为了暂时解决这个问题,我不得不重启IIS。我正在使用以下代码片段连接到MSSQL:

        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();

            /* my commands here */

            connection.Close();
            connection.Dispose();
            SqlConnection.ClearPool(connection);
        }

我允许了端口1433的入站和出站规则,但没有任何变化。我按照以下指示进行操作:

但是没有任何改变。

2个回答

5
根据MSDN文档,ClearPool方法清除与连接关联的连接池。如果调用时有其他与连接相关的连接正在使用,则会标记它们并在Close方法被调用时将其丢弃(而不是返回到池中)。在关闭连接之前,应该使用ClearPool方法进行清理。详见:https://msdn.microsoft.com/zh-tw/library/system.data.sqlclient.sqlconnection.clearpool(v=vs.110).aspx。如果使用Using语法来管理对象,则不应使用connection.close方法,因为当运行到结尾时将自动调用该方法。只需打开连接并执行命令即可。
 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/zh-cn/library/system.data.sqlclient.sqlconnection(v=vs.110).aspx?f=255&MSPPError=-2147217396

最后确保SQL Server网络配置正确。

输入图像说明

输入图像说明


这个问题有解决方案吗?我在尝试从远程机器连接到 SQL 服务器时,从 SSMS(管理工具)收到了类似的错误。 - Aamir
1
@Aamir,你检查了防火墙设置吗?如果你是远程连接,应该打开 SQL Server 的 1433(默认)端口。 - King Jk
@KingJk 最初的问题是关于偶发性不可用事件的。防火墙要么总是工作,要么总是失效,不是吗?我也有同样的问题。偶尔在管理工具中会出现长时间握手。(大约每周一次) - przemo_li
@przemo_li 当出现这个问题时,我总是关闭防火墙。以防止防火墙影响握手包的发送。您可以跟踪SQL服务器日志 :) 参考:https://msdn.microsoft.com/zh-cn/library/ms187109.aspx - King Jk

1
我的解决方法是增加连接字符串的超时时间,因为通过VPN连接时建立连接需要很长时间。您可以通过添加;connection timeout = value来实现这一点。
当我使用VPN连接时,应用程序尝试连接SQL服务器时出现了相同的错误。
默认情况下,超时设置为15秒。
希望能有所帮助!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接