实体框架超时已过期

时间:2012-08-23 10:46:25

标签: asp.net-mvc-3 sql-server-2008 entity-framework-4.1 timeout

我最近将我的ASP.Net MVC 3 Web应用程序(实体框架4.1 for Data Persistence)发布到实时服务器。该应用程序位于一个Web服务器上,数据库(SQL Server 2008)位于另一个单独的服务器上。

该网站只有几天的点击次数很少,因此,数据库表格中包含的记录非常少(最多10-20个)。

我也有ELMAH(用于ASP.NET的错误记录模块和处理程序)集成到站点中,我已收到以下错误的一些实例

  

System.Data.SqlClient.SqlException:超时已过期。超时   在完成操作或服务器之前经过的时间段   没有回应。

下面显示了ELMAH提供的完整详细信息

  

System.Data.EntityException:基础提供程序在Open上失败。   ---&GT; System.Data.SqlClient.SqlException:超时已过期。在完成操作或服务器之前经过的超时时间   没有回应。在   System.Data.SqlClient.SqlInternalConnection.OnError(SQLEXCEPTION   exception,Boolean breakConnection)at   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()at   System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject   stateObj,UInt32错误)at   System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult   asyncResult,TdsParserStateObject stateObj)at   System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()at   System.Data.SqlClient.TdsParser.ConsumePreLoginHandshake(布尔   encrypt,Boolean trustServerCert,Boolean&amp; marsCapable)at   System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo,   SqlInternalConnectionTds connHandler,Boolean ignoreSniOpenTimeout,   Int64 timerExpire,布尔加密,布尔值trustServerCert,布尔值   integratedSecurity)   System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo   serverInfo,String newPassword,Boolean ignoreSniOpenTimeout,   TimeoutTimer超时,SqlConnection owningObject)at   System.Data.SqlClient.SqlInternalConnectionTds.LoginWithFailover(布尔   useFailoverHost,ServerInfo primaryServerInfo,String failoverHost,   String newPassword,Boolean redirectedUserInstance,SqlConnection   owningObject,SqlConnectionString connectionOptions,TimeoutTimer   超时)at   System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(的SqlConnection   owningObject,TimeoutTimer超时,SqlConnectionString   connectionOptions,String newPassword,Boolean redirectedUserInstance)   在   System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity   identity,SqlConnectionString connectionOptions,Object providerInfo,   String newPassword,SqlConnection owningObject,Boolean   redirectedUserInstance)at   System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions   options,Object poolGroupProviderInfo,DbConnectionPool池,   DbConnection owningConnection)at   System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(的DbConnection   owningConnection,DbConnectionPool池,DbConnectionOptions选项)   在System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection   拥有对象)   System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(的DbConnection   拥有对象)   System.Data.ProviderBase.DbConnectionPool.GetConnection(的DbConnection   拥有对象)   System.Data.ProviderBase.DbConnectionFactory.GetConnection(的DbConnection   拥有连接)   System.Data.ProviderBase.DbConnectionClosed.OpenConnection(的DbConnection   outerConnection,DbConnectionFactory connectionFactory)at   System.Data.SqlClient.SqlConnection.Open()at   System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(布尔   openCondition,DbConnection storeConnectionToOpen,DbConnection   originalConnection,String exceptionCode,String attemptsOperation,   布尔和放大器; closeStoreConnectionOnFailure)---内部异常结束   堆栈跟踪--- at   System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(布尔   openCondition,DbConnection storeConnectionToOpen,DbConnection   originalConnection,String exceptionCode,String attemptsOperation,   布尔和放大器; closeStoreConnectionOnFailure)at   System.Data.EntityClient.EntityConnection.Open()at   System.Data.Objects.ObjectContext.EnsureConnection()at   System.Data.Objects.ObjectQuery 1.GetResults(Nullable 1   forMergeOption)at   System.Data.Objects.ObjectQuery 1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() at System.Collections.Generic.List 1..ctor(IEnumerable 1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable
1 source)   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext   controllerContext,IDictionary 2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary 2   参数)at   System.Web.Mvc.ControllerActionInvoker&LT;&GT; C_ DisplayClass15.b _12()   在   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter   filter,ActionExecutingContext preContext,Func 1 continuation) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList 1个过滤器,ActionDescriptor actionDescriptor,   IDictionary`2参数)at   System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext   controllerContext,String actionName)

发生此错误的时间是由SELECT查询引起的。这些选择查询非常简单,即

  

从表格中选择col1,col2,col3,其中col1 = 1

正如我所说的那样,数据库中的数据非常少,因此查询不会回收100条记录。

我使用 Internet Stackoverflow 对此进行了一些研究。有些人建议增加 dbContext CommandTimeout 属性,但是,我不明白为什么我需要这样做。是的,如果我撤回了大量记录,但正如我所说,这些是简单的 SELECT 语句,最多可以撤回1-5条记录。

我也知道开发人员需要密切关注实体框架生成的SQL,因此,我下载并运行了此试用版http://www.datawizard.com,以便了解为实体创建的SQL导致问题的框架SELECT查询。同样,分析器显示这些查询是非常简单的语法,所以我不认为这是问题。

我开始认为它可能与我的数据库和Web应用程序在不同的服务器上有关,但是,我没有想法!

如果有人可以帮助或就此问​​题向我提出建议,我们将不胜感激。

谢谢大家。

0 个答案:

没有答案