0

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

该站点仅上线几天,点击量很少,因此数据库表中包含的记录很少(最多 10-20 条)。

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

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

下面显示了 ELMAH 提供的全部详细信息

System.Data.EntityException:基础提供程序在打开时失败。---> System.Data.SqlClient.SqlException:超时已过期。在操作完成之前超时时间已过或服务器没有响应。在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 异常,布尔 breakConnection) 在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() 在 System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj,UInt32 错误)在 System.Data .SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj) 在 System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket() 在 System.Data.SqlClient.TdsParser.ConsumePreLoginHandshake(Boolean encrypt, Boolean trustServerCert, Boolean&1.GetResults(Nullable1 forMergeOption) 在 System.Data.Objects.ObjectQuery 1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() at System.Collections.Generic.List1..ctor(IEnumerable 1 源) System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary 2 参数) 在 System.Web.Mvc.ControllerActionInvoker.<> c_DisplayClass15 .b _12() 在 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter 过滤器,ActionExecutingContext preContext,Func 1 过滤器,ActionDescriptor actionDescriptor,IDictionary`2 参数) 在 System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName )1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable
2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary1 continuation) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList

发生此错误的情况是由于 SELECT 查询。这些选择查询非常简单,即

从 col1 = 1 的表中选择 col1、col2、col3

正如我所说,数据库中的数据非常少,因此查询并不是要撤回 100 条记录。

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

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

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

请如果有人可以帮助或建议我解决这个问题,将不胜感激。

感谢大家。

4

0 回答 0