已成功与服务器建立连接,但在登录前握手期间发生错误

时间:2010-07-17 04:01:31

标签: .net sql-server sql-server-2008 ado.net database-connection

当我尝试从本地环境连接Production DB时,我收到以下错误。

之前我能够连接生产数据库,但突然之间我遇到了错误,任何想法?

  

已成功与服务器建立连接,但在登录前握手期间发生错误。 (提供者:TCP提供者,错误:0 - 句柄无效。)

我试图在本地PC上运行asp.net网站,其中包含生产数据库的连接字符串,以下是我在本地环境中获取的错误的堆栈跟踪。

  

在D:\ EDrive \ My WebSites \ MyWebsite \ MyWebsite \ MyWebsiteDAL \ clsForumQuestion.cs中的MyWebsiteDAL.clsForumQuestion.SelectAll(Int32 CurrentPageIndex,Int32 PageSize):第821行          在D:\ EDrive \ My WebSites \ MyWebsite \ MyWebsite \ MyWebsite \ Default.aspx.cs中的CodeConnect.Default.Page_Load(Object sender,EventArgs e):第100行          在System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp,Object o,Object t,EventArgs e)          在System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender,EventArgs e)          在System.Web.UI.Control.OnLoad(EventArgs e)          在System.Web.UI.Control.LoadRecursive()          在System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)

知道这里可能出了什么问题吗?

26 个答案:

答案 0 :(得分:143)

<强>解决方案

1)清理VS.Net解决方案

2)重建项目。

3)重置IIS

4)再次运行项目。

基本上解决了我的问题,但在我的情况下,我没有收到此错误,突然我的本地环境开始给我上面的错误,所以可能这个技巧对我有用。

答案 1 :(得分:12)

- 我保存了我的工作,
  - 关闭Visual Studio,然后
  - 重新打开我的项目

始终适合我。

答案 2 :(得分:9)

运行一些内存非常昂贵的进程时,我遇到了这个错误。当系统开始缺少内存时,我开始注意到这种错误。 我不得不改变算法,以便更好地利用RAM。

需要注意的是,虽然有些线程抛出此异常,但其他一些线程抛出:

  

System.Data.SqlClient.SqlException(0x80131904):连接超时已过期。尝试使用登录前握手确认时超时时间已过。这可能是因为登录前握手失败或服务器无法及时响应。尝试连接到此服务器所花费的时间是 - [Pre-Login] initialization = 43606;握手= 560; ---&GT; System.ComponentModel.Win32Exception(0x80004005):等待操作超时

系统更改后,这两个问题都消失了,因此可以使用较少的RAM运行。

答案 3 :(得分:8)

在我的情况下,此错误发生在点网核心和Microsoft.Data.SqlClient上。 解决方案是在连接字符串的末尾添加;TrustServerCertificate=true

答案 4 :(得分:7)

运行以下命令对我有用:

netsh Winsock reset

https://serverfault.com/a/487139/250527

答案 5 :(得分:5)

您可能想要检查一些事项:

  1. 您的生产服务器允许远程连接。 (可能有人拒绝了,特别是如果你有DBA)

  2. 检查您的连接字符串。有时,如果您使用的是IP地址或服务器名称,则会导致此错误。试试两个。

答案 6 :(得分:5)

我遇到了同样的问题,我将会话数据存储在数据库中,连接字符串中有 Encrypt = True ,我假设它告诉sql客户端安全地连接到服务器( SSL)模式,删除它有帮助!

答案 7 :(得分:3)

就我而言:

Persist Security Info=True;

在我需要删除的连接字符串中。一旦我这样做,我就不再有问题。

答案 8 :(得分:3)

Ricardo的答案所述,

netsh Winsock reset

对我有用,

PS 如果您有Internet下载管理器或此类程序更改您的IP设置已安装然后在您重新启动计算机后运行此命令IDM将要求更改设置,在这种情况下设置为NO然后运行你的应用程序它将正常工作。

希望它

答案 9 :(得分:3)

我遇到了一个类似的问题,我无法连接到数据库并尝试了这些建议。

在一天结束时,这对我有用:

使用SQL Server配置管理器工具在SQL Server客户端计算机上启用TCP / IP和/或命名管道协议。

  1. 单击“开始”,指向“所有程序”,然后单击“SQL Server配置管理器”。
  2. 单击以展开“SQL Server网络配置”,然后单击“客户端协议”。
  3. 右键单击TCP / IP协议,然后单击“启用”。
  4. 右键单击“命名管道”协议,然后单击“启用”。
  5. 如果系统提示,请重新启动SQL Server服务。
  6. 我仍然不确定为什么或什么时候被禁用。

答案 10 :(得分:2)

对我来说,解决方案是杀死僵尸IIS快速工作进程。

e.g。找到任务管理器并结束任务。

enter image description here

答案 11 :(得分:1)

I was getting the exact same problem with no chnges to the code base or servers. It turned out to be that the DB server was running at 100% CPU and SQL Server was being starved of any CPU time, which caused the timeout.

答案 12 :(得分:1)

在过去的一个月中,我尝试了许多解决方案,但都没有成功。问题是生产数据库位于VPN内,并且ISP提供商以某种方式认为HTTP连接不安全。但是,我能够从SSMS(使用TCP)连接到同一生产数据库。

我的解决方案:将手机用作热点,并使用移动数据代替我的办公室/家庭Wi-Fi。

答案 13 :(得分:1)

尝试了以上大多数方法,但没有任何效果。然后关闭VPN软件(NordVPN),一切都很好。

答案 14 :(得分:1)

很多天以来都遇到过同样的问题。我必须在我的核心项目中显式添加TLS1.2支持,以解决此错误,并且效果很好。 (ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;)

有关更多详细信息,请参见下面的链接(感谢作者Usman Khurshid) https://www.itechtics.com/connection-successfully-established-error-occured-pre-login-handshake/

答案 15 :(得分:1)

我重新启动了 SQL Server(Sharepoint)服务,它解决了这个问题。

答案 16 :(得分:1)

我遇到了同样的问题,并且对建议的修复程序没有运气。然后我遇到了this article并看到Mirrh关于一个名为Sendori阻止LSP的程序的评论。不知道它是如何在我的计算机上得到的,但它就是并删除它解决了问题。

如果文章不起作用,只需检查您的程序并在发现后卸载Sendori。

答案 17 :(得分:0)

这里的问题相同,此处列出的答案没有工作,也没有我在网上找到的任何解决方案。在我的开发PC上应用Windows 10周年纪念更新后不久就开始出现此问题,并且仅影响了我的旧SQL Server 2005实例。我无法通过我的Web应用程序连接到实例,甚至无法使用Sql Management Studio。

对于它的价值,这就是为我解决的问题:

  1. 打开SQL Server配置管理器(取决于您正在运行的SQL Server版本):

    • C:\的Windows \ Syswow64资料\ SQLServerManager.msc
    • C:\ Windows \ SysWOW64 \ SQLServerManager10.msc OR
    • C:\ Windows \ SysWOW64 \ SQLServerManager12.msc或
  2. 选择SQL Server服务

  3. 找到有问题的服务并查看属性

    • 例如我的SQL Server(SQL2005)
  4. 在登录标签中,更改&#34;内置帐户&#34;到&#34;网络服务&#34;

  5. 这几乎是随机解决方案所说的:http://www.kutayzorlu.com/operating-systems/linux-unix-redhat-debian-ubuntu-opensuse-centos/general-server-administrating/error-fixed-a-connection-was-successfully-established-with-the-server-but-then-an-error-occurred-during-the-pre-login-handshake-12405.html

    我毫无理由地选择了网络服务。我已经配置为使用本地系统。这种安全性对我来说并不重要,因为它只在我的本地开发机器上出现问题,只能在本地访问。我不能建议为什么会这样,但确实如此。

答案 18 :(得分:0)

在我的情况下,当我想访问远程数据库时,我收到错误。但是,我通过启动SQL Server Browser服务来解决它。

enter image description here

答案 19 :(得分:0)

我遇到了这个错误并完成了你们这里的所有建议,但没有一个对我的错误有任何影响。

我抓住了罪魁祸首:如果您正在为系统使用*.ini文件,您可能需要检查输入的服务器名称,并确保它与web.config连接字符串中的名称相同

答案 20 :(得分:0)

如果要连接到旧的SQL Server:

从System.Data。 SqlClient.SqlConnection 切换到System.Data。 OleDb.OleDbConnection

使用OleDb连接字符串:

<connectionStrings>
<add name="Northwind" connectionString="Provider=SQLOLEDB.1; Data Source=MyServer; Initial Catalog=Northwind;  Persist Security Info=True; User ID=abc; Password=xyz;" providerName="System.Data.OleDb" />
</connectionStrings>

答案 21 :(得分:0)

就我而言,数据库服务器中的Re-enabling TLS 1.0解决了此问题。

答案 22 :(得分:0)

有同样的问题,它的原因是使用.NET 2.0框架编译的BCrypt.Net库,而使用它的整个项目是用.NET 4.0编译的。如果症状相同,请尝试下载BCrypt source code并在.NET 4.0中的发布配置中重建它。在我完成它之后“登录前握手”工作正常。希望它可以帮助任何人。

答案 23 :(得分:0)

在我的情况下,这是Raspberry Pi之间的TLS协议不匹配,Raspberry Pi托管了.Net Core 3.1应用程序,请求使用MSSQL的Windows Server 2012。我在Windows Server端尝试了TLS协议版本的许多更改,但没有任何效果。我终于找到了这篇帖子https://github.com/dotnet/SqlClient/issues/126,表明修改了客户端,即在RPi方面更新了/etc/ssl/openssl.cnf,对我来说非常有用。

答案 24 :(得分:0)

对我来说,这是在访问本地(主机)计算机上的数据库的HyperV虚拟机上发生的。基本上,它们都可以正常工作,但是在重新启动后,会出现一些奇怪的情况,即该错误开始从虚拟机应用程序中出现。网络层中有些东西变得令人困惑。但是,我发现如果我从主机服务器 ping 虚拟服务器,似乎可以解决问题(不确定为什么会这样)。但这可能会对某人有所帮助。

答案 25 :(得分:0)

就我而言,在我的本地机器上运行时,从我的 API 到数据库的连接工作正常,此错误仅在使用基础映像的 docker 容器中运行 .NET Core 5 API 应用程序时发生:mcr.microsoft.com/dotnet/aspnet:5.0 .问题是 SQL Server 和我们的依赖项之一之间的 TLS 版本不一致。修复方法是在 API Dockerfile 中添加以下行,降低 TLS 的安全级别:

运行 sed -i 's/DEFAULT@SECLEVEL=2/DEFAULT@SECLEVEL=1/g' /etc/ssl/openssl.cnf

这取自 this article,其中建议使用上述 RUN 命令,这解决了我的问题。指向建议修复的直接链接是 here