我有ASP.NET网站。我故意使数据库脱机,以便可以检查“我的自定义”错误页面是否运行正常并得到显示。
在我的错误页面中:我没有使用任何ASP.NET实体框架。这是一个ASP.NET页,因为我使用的是本地化资源。 (&因此将无法转换为html页面)
我的Web.config这样说:
<system.webServer>
<httpErrors errorMode="DetailedLocalOnly" existingResponse="Replace">
<remove statusCode="404" subStatusCode="13" />
<error statusCode="404" subStatusCode="13" prefixLanguageFilePath="" path="LargeFileError.aspx" responseMode="Redirect" />
<remove statusCode="500" />
<error statusCode="500" path="Error.aspx" responseMode="ExecuteURL"/>
</httpErrors>
</system.webServer>
<system.web>
<customErrors mode="On" defaultRedirect="/Error.aspx" redirectMode="ResponseRewrite">
<error statusCode="500" redirect="Error.aspx" />
</customErrors>
</system.web>
在Global.asax的Application_Error中。
protected void Application_Error(object sender, EventArgs e)
{
Exception exception = Server.GetLastError();
Response.Clear();
Server.ClearError();
Response.Redirect("Error.aspx");
}
我不断收到此错误:
“底层提供程序在打开时失败。”
堆栈跟踪为:
在System.Data.Entity.Core.EntityClient.EntityConnection.Open()
在 System.Data.Entity.Core.Objects.ObjectContext.EnsureConnection(布尔 shouldMonitorTransactions) System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction [T](Func1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess) at System.Data.Entity.Core.Objects.ObjectQuery
1。<> c__DisplayClass7.b__5() 在 System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute [TResult](Func1 operation) at System.Data.Entity.Core.Objects.ObjectQuery
1.GetResults(Nullable1 forMergeOption) at System.Data.Entity.Core.Objects.ObjectQuery
1..GetEnumerator> b__0() 在System.Data.Entity.Internal.LazyEnumerator1.MoveNext() at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable
1处) 在 System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.b__2 [TResult](IEnumerable1 sequence) at System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerable
1 查询,表达式queryRoot)在 System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute [TResult](表达式 表达式) System.Linq.Queryable.SingleOrDefault [TSource](IQueryable1 source)
1.FindInStore(WrappedEntityKey 键,字符串为keyValuesParamName) System.Data.Entity.Internal.Linq.InternalSet
at System.Data.Entity.Internal.Linq.InternalSet1.Find(Object[] keyValues) at System.Data.Entity.DbSet
1.Find(Object [] keyValues)
在System.Web.Providers.DefaultSessionStateProvider.DoGet(HttpContext 上下文,字符串ID,布尔值独占,布尔值和锁定,TimeSpan& lockAge,Object&lockId,SessionStateActions和action)位于 System.Web.Providers.DefaultSessionStateProvider.GetItemExclusive(HttpContext 上下文,字符串ID,布尔值和锁定,时间跨度和lockAge,对象和 lockId,SessionStateActions和操作) System.Web.SessionState.SessionStateModule.GetSessionStateItem()位于 System.Web.SessionState.SessionStateModule.BeginAcquireState(Object 源,EventArgs e,AsyncCallback cb,对象extraData)位于 System.Web.HttpApplication.AsyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep步骤)
在System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤, 布尔值和同步完成)
您可能会说,对于此错误,堆栈溢出有很多解决方案。我已经遍历了它们,它们对我没有帮助,因为在那个错误页面中我根本没有实体框架(我的网站页面上确实有实体框架),并且我希望这个错误会出现。
即使我要导航到error.aspx页面,我也会收到此错误。本页没有对asp.net实体框架的引用。
如何解决此问题,并确保在数据库处于脱机状态时显示错误页面。
答案 0 :(得分:0)
问题是我的会话存储在数据库中,因此即使在error.aspx页面中,来自实体框架的调用也是如此。
要进入错误页面,我必须使用指令EnableSessionState="false"
从错误页面中删除会话状态。