SQL Server登录前握手确认错误

时间:2014-03-21 18:30:18

标签: asp.net sql-server asp-classic sql-server-2012 iis-8

我们有一个混合了经典ASP,内联.Net和编译.Net的生产网站,它与一个SQL Server实例进行对话,其中两个虚拟机位于同一个物理盒上,而且一切都很好。为了使用新功能进行一些测试,我创建了站点的QA版本,并将其设置为连接到托管在另一台物理服务器上的VM上的数据库。它们是不同的网络(DMZ /内部),但都在千兆位的同一机架中,因此连接速度不应成为问题。

我们遇到的问题是QA版本会运行一段时间然后突然消失,直到我重新启动应用程序池和网站。它不是一个负载问题,因为它只是我和另外两个人测试这个过程而且我已经确认QA数据库所在的服务器没有资源问题(16GB) RAM,3.2GB使用和处理器利用率在2%范围内徘徊)。所有页面变体都会出现特定错误(如下所示) - 经典ASP,内联.Net和已编译的.Net页面。根据我所做的所有研究,我不断指出它是防火墙问题,但我们甚至打开了两台服务器之间的所有端口,但它仍然会发生。最奇怪的部分是当我们在我们的ASA(5515-X)上启用跟踪时,它几乎看不到任何流量,有时网站会立即恢复该错误,而其他时间需要30秒以上。有问题的页面也没有进行任何强烈的查找(一个页面已经消失,总共抓取了大约60条记录)。这是完整的错误/堆栈跟踪:

  [Win32Exception (0x80004005): The wait operation timed out]

  [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=21008; handshake=12; ]
   System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +6749670
   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +815
   System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error) +817
   System.Data.SqlClient.TdsParserStateObject.ReadSniSyncOverAsync() +344
   System.Data.SqlClient.TdsParserStateObject.TryReadNetworkPacket() +48
   System.Data.SqlClient.TdsParser.ConsumePreLoginHandshake(Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, Boolean& marsCapable) +126
   System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, Boolean withFailover) +693
   System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean withFailover) +219
   System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout) +6777754
   System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential credential, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance) +6778255
   System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData) +878
   System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) +1162
   System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) +72
   System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) +6781425
   System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) +103
   System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) +2105
   System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) +116
   System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) +1089
   System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +6785863
   System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry) +233
   System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) +278
   System.Data.SqlClient.SqlConnection.Open() +239
   System.Web.UI.Control.LoadRecursive() +71
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3178

我会显示一个代码块,但由于所有页面一旦开始就会开始死亡,因此它不会有很多好处。这一切在生产中都很有用,所以唯一的区别是虚拟机在不同的物理主机上,但鉴于它是所有新硬件,没有理由这应该有问题。

我在这里也遇到过使用exec sp_updatestatsdbcc freeproccache的多个内容,但这些似乎都没有什么区别。

我完全失去了所有的建议吗?

4 个答案:

答案 0 :(得分:7)

与SQL Express 2014有类似的问题,结果证明是Windows防火墙问题,我们的一些服务器上有SQL 2005/2008,所有服务器都禁用了Windows防火墙。

在我的电脑上进行了更改,之后效果很好!

由于

布伦丹

答案 1 :(得分:6)

几个月前,我遇到了类似的问题。

对我来说,在SQL Server配置管理器中为IPV4和IPV6启用TCP / IP修复了该问题。即使没有安装IPV6,我也看到过这种情况。奇怪的是,即使我只指定了IPV4地址,我甚至也经历过这种行为?!

答案 2 :(得分:4)

有相同的问题/错误消息。对我来说,这是服务器上的防火墙设置。确保TCP端口1433对传入流量开放。

答案 3 :(得分:3)

防火墙启用后出现此错误。 我确实在防火墙上添加了端口enable sqlserver port 然后我又得到了那个错误。

在SQL Server配置管理器中启用命名管道和TCP / IP,您可以在以下位置找到它:

开始菜单> allprogram> microsoft sql server>配置工具。