首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在登录前握手时发生错误。

在登录前握手时发生错误。
EN

Stack Overflow用户
提问于 2017-04-24 20:37:51
回答 4查看 20.1K关注 0票数 12

请阅读全文,然后将其标记为副本.

在我正在调试的项目中,我收到一个SqlException,上面写着:

附加信息:成功地与服务器建立了连接,但在登录前握手时发生了错误。(提供者: SSL提供程序,错误:0-等待操作超时。)

这是在调试会话期间发生的,在调试会话中,前一个会话仅在几秒钟前执行,没有问题。由于初始异常,我无法连接到此项目中的数据库服务器。在SqlConnection.Open()方法调用.上抛出异常

背景

这不是我第一次收到这封信。在此之前,我与它进行了两周的斗争,最终启动了微软的支持票。在该实例中,它发现连接字符串上的ApplicationName属性太长(我们使用的是完全限定的程序集名称),缩短它可以缓解问题。

这一次,有

  • 没有提供ApplicationName值
  • WinSocks处于默认状态。
  • 防病毒(ESET)被禁用,而不是问题所在。
  • 在正在工作的调试会话和不工作的调试会话之间没有任何安装。

最后,出于一时兴起,我创建了一个新项目,其唯一目的是连接到同一台SQL服务器。我将连接字符串从不工作的项目复制到新项目中,并将其连接起来。每一个项目的连接缓存都在进行吗?在Clean>Rebuild和Visual和Windows的重新启动中幸存下来的东西吗?

相关守则

代码语言:javascript
运行
复制
    public SqlConnection OpenSqlConnection(string connectionString)
    {
        var conn = new SqlConnection(connectionString);
        conn.Open();
        _connectionString = connectionString;
        var sb = new SqlConnectionStringBuilder(_connectionString);
        _server = sb.DataSource;
        _database = sb.InitialCatalog;
        return conn;
    }

正在传入的连接字符串是从应用程序中其他地方的SqlConnectionStringBuilder输出的。连接字符串类似于:"Data Source=SERVER;Initial Catalog=DATABASE;Integrated Security=True;Connect Timeout=60"

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-10-16 18:19:38

因此,这个问题继续困扰着我,它似乎是来自我的家庭网络(我是一个远程开发人员)和通过VPN访问的工作网络的滞后功能。我对工作网络上的服务器平均有100 to的ping时间。

真正奇怪的是,连接字符串工作了几个月没有问题,然后突然停止。当时,Application值类似于Application = "MyProgram.DAL. Culture=en,PublicKeyToken=1a1a1a1a1a1a1a1a,Version=1.0.0.0“。换句话说,一个完全限定的程序集名称。最后,我将它更改为缩短的"MyProgram.DAL“类型名称,它再次工作。

几个月后,我又被它所困扰。我碰巧发现,如果我吃了这个例外,等了几次,一切都很好。即使应用程序报告它失败了,它也会很高兴地使用连接。因此,我将方法更改为:

代码语言:javascript
运行
复制
    public SqlConnection OpenSqlConnection(string connectionString)
    {
        var conn = new SqlConnection(connectionString);
        var retries = 10;
        while (conn.State != ConnectionState.Open && retries > 0)
        {
            try
            {
                conn.Open();
            }
            catch (Exception)
            {

            }
            Thread.Sleep(500);
            retries--;
        }

        _connectionString = connectionString;
        var sb = new SqlConnectionStringBuilder(_connectionString);
        _server = sb.DataSource;
        _database = sb.InitialCatalog;
        return conn;
    }
票数 0
EN

Stack Overflow用户

发布于 2018-06-11 20:26:54

对我来说,诀窍是增加连接字符串上的超时,因为通过vpn连接需要很长时间才能建立连接。您可以通过添加;连接超时=值来实现这一点。

当我在vpn上连接一个试图连接到sql服务器的应用程序时,我也遇到了同样的错误。

默认情况下,超时设置为15秒。

看来你已经有60秒了,也许你只是需要更多.

希望能帮上忙!

票数 3
EN

Stack Overflow用户

发布于 2017-05-01 20:25:54

尝试显式地将Application Name=MyAppName;添加到连接字符串。从程序集名称自动生成的值可能超过某些限制。

检查网络设置,比如显式限制帧大小。如果Server正在另一台计算机上运行,则重新启动路由器。

尝试将Pooling=False;添加到连接字符串,并检查这是否解决了应用程序重新启动时重复连接的问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43597294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档