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

Jor*_*lis 102 .net sql-server ado.net database-connection sql-server-2008

当我尝试从本地环境连接生产数据库时,我收到以下错误.

之前我能够连接Production DB,但突然间我得到了跟随错误,有什么想法吗?

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

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

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

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

Jor*_*lis 146

1)清理VS.Net解决方案

2)重建项目.

3)重置IIS

4)再次运行项目.

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

  • 我有类似的问题(localhost也是如此).关键点似乎可能是第3点.我似乎需要做的就是杀死VS WebServer(Cassini)的实例并重建并点击F5.这解决了我.感谢您的回答.(您应该考虑将其标记为解决方案) (24认同)
  • 这听起来更像是一种解决方法,而不是修复方法.我想知道真正的问题是否与连接池有关. (7认同)
  • 通过为根本原因分析提供一些可能的方向,可以改进这个答案.解决方法具有价值,但更有用的是知道为什么会发生这种情况以及解决方法的原因. (6认同)
  • 今天又有这个。您需要做的只是在管理员命令提示符下运行iisreset。 (2认同)

gra*_*rer 15

在我的情况下,这个错误发生在 dot net core 和Microsoft.Data.SqlClient. 解决方案是添加;TrustServerCertificate=true到连接字符串的末尾。

  • 使用自签名证书时就是这样 (3认同)
  • 标签: dotnet7 net7 Microsoft.EntityFrameworkCore.SqlServer (2认同)

Dum*_*ani 13

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

总是适合我.

  • 这对我也有用,但我经常发现在重新启动时煮咖啡会产生重大影响. (23认同)

Ric*_*ven 9

运行以下命令对我有用:

netsh Winsock reset
Run Code Online (Sandbox Code Playgroud)

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

  • 仅供参考,此“重置”需要重新启动系统。 (3认同)
  • 这解决了我的问题.我欠网络午餐因为我把他扔到了公交车下面. (2认同)

Sta*_*opo 9

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

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

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

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

  • 确认的。我在笔记本电脑上使用 parallel.foreach 从 C# 对 SQL Server 进行了密集处理。我的内存使用量已达到最大值。在我收到此错误之前,计算机几乎无法使用大约 15 分钟。 (2认同)

小智 5

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

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

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


Ter*_*nan 5

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


del*_*ttg 5

就我而言,它是:

Persist Security Info=True;

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


geo*_*tnz 5

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