2013-06-12 151 views
4

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

这本身就很奇怪,因为请求上下文中的异常不会影响工作进程。它可能是后台线程或回调等的异常,但是,这是一个简单的网站,没有什么奇特的事情发生。

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

我有相当多的日志记录启用,它的平原看到我从数据层得到一个异常,其HttpException在HttpUnhandleException中,然后当我浏览主页后立即请求记录一个警告关于缺少的状态。

更糟。这不会发生在我的开发盒(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让我离开监狱,但它的一个奇怪的问题。我是新来的代码库,我想我到处检查会话被清除或状态被覆盖。

+0

如果你在'Application_Start'中放置一个断点,会发生什么?这是否再次被调用? –

+0

该网站的负载是否平衡?你使用Webgarden吗? –

+0

@Darin - 它不叫。这里也有记录,似乎WP保持不变。 –

回答

-3

1线程被破坏 2个异步环境

使用的HttpContext作为参数 不System.Web程序。 * * .httpcontext

+5

请付出更多努力回答。用标点符号写出整个句子,确保格式正确。最重要的是,请解释*为什么*这回答了这个问题。 –