成功地与服务器建立了连接,但是在登录前的握手过程中发生了一个错误

当我试图从本地环境连接产品数据库时,出现了以下错误。

我能够连接生产数据库之前,但突然我得到下面的错误,任何想法?

成功地与服务器建立了连接,但是在登录前的握手过程中发生了一个错误。(提供者: TCP 提供者,错误: 0-句柄无效。)

我试图在本地 PC 运行 asp.net 网站,它有连接字符串的产品数据库,以下是堆栈跟踪我在本地环境中得到的错误。

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

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

350728 次浏览

解决方案

1)清洁你的 VS.Net 解决方案

2)重建工程。

3)重置 IIS

4)再次运行项目。

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

你可能需要检查一些东西:

  1. 您的生产服务器允许远程连接(可能有人将其关闭,特别是如果您有 DBA 的话)

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

有同样的问题,原因是地穴。网络库,使用。NET 2.0框架,而整个项目,使用它,正在编译。NET 4.0.如果症状相同,请尝试下载 BCrypt 源代码并在 释放配置中重建它。NET 4.0.在我完成之后,“预先登录握手”工作得很好。希望对大家有帮助。

我也遇到了同样的问题,我在数据库中存储会话数据,连接字符串中包含 加密 = 真,我假设它告诉 sql 客户端以安全(SSL)模式连接到服务器,删除这个有帮助!

我也遇到了同样的问题,并且没有找到建议的修复方法。然后我偶然发现了 这篇文章,看到了来自 Mirrh 的评论,是关于一个名为“森多利”的项目阻止了 LSP。不知道它怎么会在我的电脑上,但它就在那里,把它移除就解决了问题。

如果文章不工作只是检查您的程序和卸载 Sendori,如果你看到它。

对我来说是:

Persist Security Info=True;

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

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

  • 省省吧,
  • 那就关闭 Visual Studio
  • 重新打开你的项目

这招对我很管用。

运行以下命令对我很有用:

netsh Winsock reset

https://serverfault.com/a/487139/250527频道看到的

我经历了这个错误,并做了你们在这里的所有建议,但没有一个对我的错误有任何影响。

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

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

例如,在任务管理器中定位并结束任务。

enter image description here

正如 里卡多的答案所描述的,

netsh Winsock reset

对我很有效,

如果你有因特网下载管理器或这样的程序,改变你的 IP 设置是安装然后运行这个命令后,当你重新启动你的计算机 IDM 会要求改变设置,设置 NO 在这种情况下,然后运行你的应用程序,它会正常工作。

希望如此

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

需要注意的是,有些线程抛出了这个异常,有些线程抛出:

系统。百科。SqlClient.SqlException (0x80131904) : 连接超时已过期。在尝试使用登录前的握手确认时超时时间已经过去。这可能是因为登录前的握手失败或服务器无法及时响应。尝试连接到此服务器所花费的时间为-[ Pre-Login ]初始化 = 43606; handshake = 560; ——-> System。组件模型。Win32Exception (0x80004005) : 等待操作超时

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

我得到了完全相同的问题,没有改变代码库或服务器。事实证明,DB 服务器运行在100% 的 CPU 上,而 SQLServer 缺乏任何 CPU 时间,这导致了超时。

我有一个类似的问题,我不能连接到一个数据库,并尝试在这里的建议。

归根结底,这对我有效:

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

  1. 单击“开始”,指向“所有程序”,然后单击“ SQLServer 配置管理器”。
  2. 单击以展开 SQLServer 网络配置,然后单击客户端协议。
  3. 右键单击 TCP/IP 协议,然后单击 Enable。
  4. 右键单击命名管道协议,然后单击“启用”。
  5. 如果提示重新启动 SQL 服务器服务,则重新启动。

我还是不确定为什么或者什么时候这个被禁用了。

同样的问题,这里列出的答案没有工作,也没有任何解决方案,我可以在网上找到。这个问题在 Windows 10周年更新应用到我的开发电脑后不久就开始了,并且只影响到我的旧 SQLServer2005实例。我无法通过 Web 应用程序或甚至使用 SqlManagementStudio 连接到实例。

不管怎样,这就是解决我问题的方法:

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

    • C: Windows SysWOW64 SQLServerManager.msc
    • C: Windows SysWOW64 SQLServerManager10.msc OR
    • C: Windows SysWOW64 SQLServerManager12.msc OR
    • 等等
  2. 选择 SQLServer 服务

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

    • 例如 SQLServer (SQL2005)
  4. 在“登录”选项卡中,将“内置帐户”更改为“网络服务”

这几乎就是这个随机解所说的: 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

我毫无理由地选择了网络服务。我的已经配置为使用本地系统。这种安全性对我来说并不重要,因为它只在我的本地开发计算机上有问题,只能在本地访问。我不知道这为什么有用,但确实有用。

在我的例子中,当我想访问一个远程数据库时,我得到了一个错误。但是,我通过启动 SQLServerBrowser 服务解决了这个问题。

enter image description here

很多天都有同样的问题。我不得不在我的核心项目中明确地添加 TLS1.2支持来解决这个错误,它工作得很好。(ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;)

更多细节见下面的链接(感谢作者 Usman Khurshid) Https://www.itechtics.com/connection-successfully-established-error-occured-pre-login-handshake/

如果连接到旧的 SQLServer:

从 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>

在我的例子中,DB 服务器中的 重新启用 < strong > TLS 1.0 解决了这个问题。

尝试了以上大部分方法,都没有效果。然后关闭 VPN 软件(NordVPN) ,一切正常。

在过去的一个月里,我尝试了很多解决方案,但没有一个奏效。问题是,ProductionDB 在 VPN 中,而 ISP 提供商认为 HTTP 连接不安全。但是,我能够从 SSMS (使用 TCP)连接到相同的 ProductionDB。

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

在我的案例中,这个错误发生在.net 核心和 Microsoft.Data.SqlClient上。 解决方案是将 ;TrustServerCertificate=true添加到连接字符串的末尾。

在我的情况下,这是一个 TLS 协议不匹配之间的覆盆子派托管一个。Net Core 3.1应用程序请求使用 MSSQL 访问 Windows Server 2012。我尝试了许多变化的 TLS 协议版本在 Windows 服务器端没有任何影响。我最后发现这个后 https://github.com/dotnet/SqlClient/issues/126,表明修改客户端,即更新 /etc/ssl/openssl.cnf的 RPi 方,这对我来说很好。

对我来说,这种情况发生在一台 HyperV 虚拟机上,它正在访问我本地(主机)机器上的数据库。基本上一切正常,但是在重新启动之后,出现了一些奇怪的情况,即这个错误开始出现在虚拟机应用程序中。网络层中有一些东西正在变得非常混乱。但是,我发现,如果我从主机服务器的虚拟服务器 正常,它似乎解决了问题(不确定确切的原因)。但这也许能帮到某人。

在我的例子中,从 API 到 DB 的连接在本地机器上运行时工作良好,只有在运行。NET Core 5 API 应用程序在一个 Docker 容器中使用基本映像: mcr.microsoft.com/dotnet/aspnet:5.0。问题是 SQLServer 和我们的一个依赖项之间的 TLS 版本不一致。修复的方法是在 API Dockerfile 中添加以下代码行,降低 TLS 的安全级别:

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

这是从 这篇文章,其中上述 RUN命令被建议,这修复了我的问题。直接链接到建议的修复是 给你

另一件需要检查的事情是,是否将 SQLServer 网络配置设置为“强制加密”。如果您这样做,您将得到这个错误,除非您为加密连接执行必要的客户机咒语。

# Macusers

我找到了新的解决方案,但没有关闭 VisualStudio。

  1. 去航站楼。

  2. lsof -i:<PORT_Number>也就是我的1433。

  3. Outout 将使用该端口号进行处理

  4. 使用 kill -9 <PID>(即进程 ID)杀死这些进程

请参阅附件截图。

commands and respective outputs for killing process

对我来说,那是个错误的港口。我通过一个 混合连接从 Azure App Service 连接到 on-prem DB,连接使用了一个端口,但是 SQL Server 实例使用了一个不同的端口。确保所有端口都匹配: 连接字符串、 VPN/代理/混合连接、 SQL Server 允许 每个协议的端口。

sqlcmdping/tcpping是在您尝试更改应用程序中的任何代码之前测试您的连接性的很好的工具。您可以在本地或在云中运行它们。

如果要连接到可用性组中的数据库,那么可能需要将 multisubnetfailover=true添加到连接字符串中。

对我来说,我在吸毒。Net 6但更新了实体框架核心包到7.0版。在降低 Nuget 软件包的级别后,这个问题就消失了。