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


111

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

我以前可以连接生产数据库,但突然我收到以下错误消息,知道吗?

已成功与服务器建立连接,但是在登录前握手期间发生错误。(提供者: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)

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


您要连接到哪个DBMS?
将在

1
您可以通过本地计算机与SSMS进行连接吗?这个问题将得到更好的问上serverfault.com
将在

是的,我可以连接。我的观察者突然开始工作了。
乔登·威利斯

2
我相信此问题确实属于StackOverflow(而不是ServerFault),因为引起错误的根本问题是Visual Studio中的Asp.net Cassini。停止所有现有的Cassini(WebDev.WebServer.exe)实例,然后重新运行该应用程序对我来说很有用。
MikeTeeVee 2011年

@ MikeTeeVee我在一个简单的WinForm应用程序中遇到了同样的问题。不涉及卡西尼。
西尔文·罗德里格

Answers:


154

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

2)重建项目。

3)重置IIS

4)再次运行项目。

基本上可以解决我的问题,但是就我而言,我没有遇到此错误,突然我的本地环境开始给我上述错误,因此这可能对我来说是个窍门。


25
我有一个类似的问题(本地主机也是如此)。关键点似乎可能是第3点。我似乎要做的就是杀死VS WebServer(Cassini)的实例,然后重建并按F5键。那为我解决了。感谢您的回答。(您应该考虑将其标记为解决方案)
Amadiere

1
此解决方案也对我有用。我也使用VS Web Server(Cassini),而不是与Amadiere相同的IIS。
西蒙·洛马克斯

7
这听起来更像是一种解决方法,而不是解决方法。我想知道真正的问题是否与连接池有关。
jrummell

2
今天又有这个。您需要做的只是在管理员命令提示符下运行iisreset。
伊恩·坎普

6
通过为根本原因分析提供一些可能的指导,可以改善此答案。变通办法具有价值,但了解这种情况的发生原因以及变通办法为何起作用,这将更为有用。
laindir '16

15

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

永远为我工作。


29
这对我也很有效,但是我经常发现在重新启动时煮一杯咖啡与众不同。
ED-209 2014年

我有一个类似的问题,但是使用节点服务器。我在ubuntu VM guest虚拟机上运行节点服务器,并从Windows 10 VM主机访问。暂停并保存VM,然后重置Windows 10主机,然后打开VM备份工作,因此我认为这是Windows的问题,而不是本地服务器的问题。但是然后,我现在只是尝试重置本地节点服务器,并且也对其进行了修复...所以,谁知道,哈
RyanQuey


9

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

要注意的是,尽管有些线程抛出了该异常,但其他线程抛出了:

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

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


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

8

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


1
如果要使用Windows Azure SQL数据库,则此标志将添加到您的连接字符串中。我非常确定它也将用于其他PaaS / IaaS /服务器提供商。
Parth Shah 2014年


5

您可能要检查几件事:

  1. 您的生产服务器允许远程连接。(可能有人关闭了此功能,尤其是在您拥有DBA的情况下)

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


4

以我为例:

Persist Security Info=True;

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


4

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


谢谢,您救了我:)
DiPix

使用自签名证书时,这是它
杰夫·冈特

3

里卡多的回答所述,

netsh Winsock reset

为我工作

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

希望它


3

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

归根结底,这对我有用:

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

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

我仍然不确定为什么或何时禁用它。


2

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

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

在此处输入图片说明


1

我也遇到了同样的问题,建议的修复没有运气。然后,我看了这篇文章,看到Mirrh对名为Sendori阻止LSP的程序的评论。不知道它如何在我的计算机上出现,但是确实存在,将其删除解决了该问题。

如果该文章不起作用,请检查您的程序并在看到的情况下卸载Sendori。


1

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


1

我遇到了完全相同的问题,没有更改代码库或服务器。原来是DB服务器在100%CPU上运行,而SQL Server在任何CPU时间上都饿死了,这导致了超时。



1

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


1

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

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


1
我的情况也一样。谢谢!
大卫·罗

0

遇到相同的问题,其原因是使用.NET 2.0框架编译的BCrypt.Net库,而使用它的整个项目都使用.NET 4.0进行了编译。如果症状相同,请尝试下载BCrypt源代码,然后在.NET 4.0的发行版配置中对其进行重建。完成后,“登录前握手”效果很好。希望它能帮助任何人。


0

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

我发现了问题的根源:如果您正在*.ini为系统使用文件,则可能要检查在其中输入的服务器名称,并确保该名称与web.config连接字符串中的名称相同。


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或
    • C:\ Windows \ SysWOW64 \ SQLServerManager12.msc或
    • 等等
  2. 选择SQL Server服务

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

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

这几乎是该随机解决方案所说的内容:http : //www.kutayzorlu.com/operating-systems/linux-unix-redhat-debian-ubuntu-opensuse-centos/general-server-administrating/error-fixed-a-connection已成功与服务器建立联系,但随后在登录前握手12405.html中发生了错误

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


0

就我而言,当我想访问远程数据库时遇到错误。但是,我通过启动SQL Server Browser服务解决了它。

在此处输入图片说明


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>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.