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

当我尝试从本地环境连接生产数据库时出现以下错误。

我之前能够连接生产数据库,但突然出现以下错误,知道吗?

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

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

>    at MyWebsiteDAL.clsForumQuestion.SelectAll(Int32 CurrentPageIndex, Int32 PageSize) in D:EDriveMy WebSitesMyWebsiteMyWebsiteMyWebsiteDALclsForumQuestion.cs:line 821
       at CodeConnect.Default.Page_Load(Object sender, EventArgs e) in D:EDriveMy WebSitesMyWebsiteMyWebsiteMyWebsiteDefault.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)

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

stack overflow A connection was successfully established with the server, but then an error occurred during the pre-login handshake
原文答案
author avatar

接受的答案

解决方案

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

2) 重建项目。

3) 重置 IIS

4) 再次运行项目。

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


答案:

作者头像

In my case this error occurred with dot net core and Microsoft.Data.SqlClient. The solution was to add ;TrustServerCertificate=true to the end of the connection string.

作者头像
  • Save your work,
  • Close Visual Studio, then
  • Re-open your project

This worked for me.

作者头像

运行以下命令对我有用:

netsh Winsock reset

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

作者头像

I experienced this error when running some very memory-expensive processes. When the system started to run short of memory, I begun to notice this kind of error. I had to change the algorithm in order to make a better use of RAM.

To be noted that while some threads threw this exception, some other threw:

System.Data.SqlClient.SqlException (0x80131904): Connection Timeout Expired. The timeout period elapsed while attempting to consume the pre-login handshake acknowledgement. This could be because the pre-login handshake failed or the server was unable to respond back in time. The duration spent while attempting to connect to this server was - [Pre-Login] initialization=43606; handshake=560; ---> System.ComponentModel.Win32Exception (0x80004005): The wait operation timed out

Both problems disappeared after the system was changed so that it could run using less RAM.

作者头像

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

作者头像

您可能需要检查几件事:

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

  1. 检查您的连接字符串。有时,如果您使用 IP 地址或服务器名称,这将导致此错误。尝试两者。
作者头像

就我而言,它是:

Persist Security Info=True;

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

作者头像

Ricardo 的答案中所述,

netsh Winsock reset

为我工作,

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

希望它

作者头像

在没有更改代码库或服务器的情况下,我遇到了完全相同的问题。事实证明,DB 服务器以 100% CPU 运行,而 SQL Server 缺少任何 CPU 时间,从而导致超时。

相关问题