我通常会避免进程内会话状态,直到这个最近的项目。我想我遇到了一个问题,在发生未处理的异常之后状态会丢失。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让我离开监狱,但它的一个奇怪的问题。我是新来的代码库,我想我到处检查会话被清除或状态被覆盖。
如果你在'Application_Start'中放置一个断点,会发生什么?这是否再次被调用? –
该网站的负载是否平衡?你使用Webgarden吗? –
@Darin - 它不叫。这里也有记录,似乎WP保持不变。 –