ASP.NET会话状态在异常后丢失

时间:2013-06-12 15:21:48

标签: asp.net asp.net-mvc

我通常避免进程内会话状态,直到这个最近的项目。我认为我遇到了一个问题,即在发生未处理的异常后状态会丢失。

这本身就很奇怪,因为请求上下文中的异常不会影响工作进程。它可能是后台线程或回调或其他东西的例外,但这是一个简单的网站,没有任何花哨的东西。

会话ID保持不变,并且未在后续请求中调用Session_Start(因此WP未回收)。

我已经启用了很多日志记录,并且可以看到我从数据层获取异常,它在HttpUnhandleException内部是一个HttpException,然后当我立即浏览到主页时,请求会记录一个警告关于失踪的国家。

更糟。这不会发生在我的开发箱(IIS Express)上,仅在QA中。

编辑:

这是一大块日志:

2013-06-12 13:44:29,975 [23] FATAL MvcApplication 100.100.100.100 pxtgn GET An unhandled exception occurred in the web application. The full exception will be unrolled below.
2013-06-12 13:44:30,897 [23] FATAL MvcApplication 100.100.100.100 pxtgn GET Exception.Type: HttpUnhandledException
Exception.Source: System.Web
Exception.Message: Exception of type 'System.Web.HttpUnhandledException' was thrown.
Exception.StackTrace:    at System.Web.UI.Page.HandleError(Exception e)
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   at System.Web.HttpContext.InvokeCancellableCallback(WaitCallback callback, Object state)
   at System.Web.UI.Page.LegacyAsyncPageBeginProcessRequest(HttpContext context, AsyncCallback callback, Object extraData)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

    Exception.Type:     HttpException
    Exception.Source:     CompanyNameProductName.MvcCoreApp
    Exception.Message:     An error was reported by the data layer: 0Image not found1-10.1007_978-1-4471-4294-2_21-16
    Exception.StackTrace:        at CompanyName.CompanyNameProductName.imagedetail.Page_Load(Object sender, EventArgs e) in c:\DATA\Git\ProductName\CompanyNameProductNameMvc\imagedetail.aspx.cs:line 55
   at System.Web.UI.Control.LoadRecursive()
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)


2013-06-12 13:45:07,913 [25] DEBUG StandardPage 100.100.100.100 pxtgn GET Initializing page 'default_aspx' for GET with query string: 
2013-06-12 13:45:07,913 [25] ERROR StandardPage 100.100.100.100 pxtgn GET No User instance in session state. Check the log for signs that the session was started properly since a User object should aways exist in session state, setup via session start events in ASP.NET.

最后一行显示缺少的状态条件。 pxtgn是会话ID中的前5个字符。我点击了一个页面,我知道数据层将关于不存在的图像ID。然后我点击的任何页面将导致我的检查记录缺失状态的问题。检查和状态引用位于母版页的代码中,因此我可以点击任何页面来查看问题。这也意味着自定义错误页面不起作用 - 这就是我找到错误的方式。

我现在在检查后添加了一个Session.Abandon()并用500来回应让我离开监狱,但这是一个非常奇怪的问题。我是代码库的新手,我想我已经检查了所有会话被清除或被覆盖的状态。

1 个答案:

答案 0 :(得分:-3)

1线程被破坏 2异步环境

使用httpcontext作为参数 不是system.web。 * * .httpcontext