我已经在这个错误中挣扎了一个多月了,并且无法弄明白。
背景/架构:
一天中偶尔会出现错误,因为当他们尝试在我的对象上阅读/显示属性时,会出现错误:
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
答案 0 :(得分:1)
这些是云环境中正常的瞬态错误。您需要实现重试逻辑/策略。
检查此答案:How do I add Retry Logic in NHibernate to handle Transient Failures in SQL Azure?