预登录握手期间发生错误

4

经过几年的开发,我的C#/.Net程序在尝试连接到MS Sql服务器数据库时出现了这个问题。我不知道该如何解决它。只有在尝试写入特定表格时才会发生此问题。清除该表格后,我注意到此问题的发生频率有所降低,但仍然偶尔会发生;

下面是我收到的两个异常:

  1. System.Data.SqlClient.SqlException (0x80131904):已成功建立与服务器的连接,但在预登录握手期间发生错误。(提供程序:SSL Provider,错误:0 - 等待操作超时。) ---> System.ComponentModel.Win32Exception (0x80004005):等待操作超时 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) ... at System.Data.Linq.DataQuery1.System.Linq.IQueryProvider.Execute[S](Expression >expression) at System.Linq.Queryable.SingleOrDefault[TSource](IQueryable1 source)

2.

System.Data.SqlClient.SqlException (0x80131904):连接超时。在尝试消耗预登录握手确认时,超时时间已过。这可能是因为预登录握手失败或服务器无法及时回应所致。尝试连接到此服务器所花费的时间为 - [Pre-Login] initialization=42511; handshake=6001; ---> System.ComponentModel.Win32Exception (0x80004005):等待操作超时 at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) ...


谢谢,但我已经看过这篇帖子了。它与asp.net有关,在我的情况下类似的方法并没有解决问题。 - sofsntp
如果您已经尝试过解决问题,请告诉我们具体方法,以免我们在此重复。 - RBarryYoung
这个错误通常是网络安全/连接加密协议/代码的失败。不幸的是,有许多可能的原因,大多数与密钥/证书和交换问题或网络配置和硬件问题有关。顺便说一句,禁用加密通常会使它消失。 - RBarryYoung
这有用吗?connectionString="Data Source=SERVER;Initial Catalog=CATALOG;Persist Security Info=True;User ID=USER;Password=PWD"? - sofsntp
有什么我可以做的来更精确地找出潜在的原因吗? - sofsntp
显示剩余4条评论
2个回答

5

我过去两天也遇到了同样的错误,原因是安装了Windows更新KB2992611,这是一个关键的SChannel更新。目前我还没有找到这会导致什么问题使得预登录握手失败的原因,但是暂时卸载此更新后,我可以重新连接到SQL Server。


更新时一直失败吗?在我的情况下,大约有0.5-1%的失败率。 - sofsntp

0
如果问题是间歇性的,您应该在服务器上运行perfmon,并监视网络适配器的数据库监视器计数器,特别是数据包丢失和过载。我认为您应该排除连接问题,突然之间交换机可能是原因。如果问题出现在配置SQL Server或防火墙方面,问题将会再次发生。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接