网站偶尔失去与数据库的连接

时间:2016-01-21 15:16:26

标签: c# sql-server asp.net-mvc azure nhibernate

我已经在这个错误中挣扎了一个多月了,并且无法弄明白。

背景/架构:

  • MVC 4应用程序
  • NHibernate的
  • FluentNHibernate
  • SQL Server 2008 R2
  • Azure网站

一天中偶尔会出现错误,因为当他们尝试在我的对象上阅读/显示属性时,会出现错误:

  

NHibernate.Exceptions.GenericADOException:无法初始化a   集合:[WrestleStat.BL.School.Schedule#54] [SQL:SELECT   ...(删除以保持此简短)....] --->   System.Data.SqlClient.SqlException:超时已过期。超时   在完成操作或服务器之前经过的时间段   没有回应。尝试连接时发生此故障   路由目的地。尝试时花费的时间   连接到原始服务器 - [预登录]初始化= 3;   握手= 23; [登录]初始化= 0;认证= 0; [提交登陆]   完整= 1; ---> System.ComponentModel.Win32Exception:等待   手术超时   ---内部异常堆栈跟踪结束---在System.Data.SqlClient.SqlInternalConnection.OnError(SqlException)   exception,Boolean breakConnection,Action`1 wrapCloseInAction)at   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject   stateObj,Boolean callerHasConnectionLock,Boolean asyncClose)at   System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject   stateObj,UInt32错误)at   System.Data.SqlClient.TdsParserStateObject.ReadSniSyncOverAsync()at   System.Data.SqlClient.TdsParserStateObject.TryReadNetworkPacket()at   System.Data.SqlClient.TdsParserStateObject.TryPrepareBuffer()at   System.Data.SqlClient.TdsParserStateObject.TryReadByteArray(字节[]   buff,Int32 offset,Int32 len,Int32& totalRead)at   System.Data.SqlClient.TdsParserStateObjec

2周前,我在AppHarbor上运行我的网站,我认为这是因为我在他们的#34;基本" (免费)计划。如果我将工作线程从1增加到2,问题似乎就消失了。因此,我决定切换到Azure(无论如何我都要去,但不是这么早)。自从切换到Azure后,问题并没有消失。

我每天在网站上收到大约十几个这样的错误。看起来好像当剃刀视图试图访问它试图读取/显示的对象的属性时总是会发生错误,而不是在控制器内部尝试检索数据。也许它与延迟加载有关???但为什么会这么重要,为什么在检索数据的极短时间内丢失连接,然后在页面上显示呢?

我对如何调试此问题感到茫然,因为它显然从未发生在我的开发环境中。我最终会切换到Dapper,但我至少在3个月内无法启动/启动它。

这里有什么想法吗?

修改:这是网站http://www.wrestlestats.com

1 个答案:

答案 0 :(得分:1)

这些是云环境中正常的瞬态错误。您需要实现重试逻辑/策略。

检查此答案:How do I add Retry Logic in NHibernate to handle Transient Failures in SQL Azure?