ASP.NET应用程序从Session.Remove实现中抛出System.NullReferenc
我们在ASP.NET Web应用程序中得到随机的System.NullReferenceException.
我们正在使用inproc会话状态. 堆栈跟踪: System.NullReferenceException: Object reference not set to an instance of an object. at System.Collections.Specialized.NameObjectCollectionBase.BaseRemove(String name) at System.Web.SessionState.SessionStateItemCollection.Remove(String name) at System.Web.SessionState.HttpSessionStateContainer.Remove(String name) at System.Web.UI.SessionPageStatePersister.Save() at System.Web.UI.Page.SaveAllState() at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint) 问题似乎来自Page.PageStatePersister属性,我们已经覆盖了这样的属性. protected override PageStatePersister PageStatePersister { get { return new SessionPageStatePersister(Page); } } Reflector显示SessionPageStatePersister在内部调用Session.Remove. 我们在Page上直接调用Session.Remove时会得到类似的随机NullReferenceException. ---> System.NullReferenceException: Object reference not set to an instance of an object. at System.Collections.Specialized.NameObjectCollectionBase.BaseRemove(String name) at System.Web.SessionState.SessionStateItemCollection.Remove(String name) at System.Web.SessionState.HttpSessionStateContainer.Remove(String name) at System.Web.SessionState.HttpSessionState.Remove(String name) at PERH.WebFramework.Bases.PageBase.OnPreInit(EventArgs e) in 有什么想法,可能会导致那些异常吗? 环境: IIS6,Windows Server 2003 64位,.net Framework 3.5 解决方法
当同时处理同一用户(来自相同会话ID)发出的请求时,可能会发生此问题.
这是因为System.Web.SessionState.SessionStateItemCollection在删除条目时不会将该条目检查为null. 在System.Web.SessionState.SessionStateItemCollection.Remove(字符串名称)方法中,在私有集合_serializedItems上设置锁定,以便Remove操作是线程安全的.然而,在Add操作期间,此私有集合不会被锁定.考虑到_serializedItems表现为一个调整大小的数组(当条目数量>> =其容量的1/2时,容量加倍,新条目填充空值)并发添加可能导致空值保留在集合中间的情况. 默认情况下,除非将System.Web.Configuration.PagesSection.EnableSessionState显式设置为ReadOnly,否则将按顺序处理具有相同会话ID的所有请求.在这种情况下,任何涉及将值添加到System.Web.SessionState.HttpSessionState(在内部使用System.Web.SessionState.HttpSessionStateContainer而内部使用System.Web.SessionState.SessionStateItemCollection)的操作都应正确锁定以确保线程安全. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.NET进行请求转发
- 没有aspx文件扩展名的ASP.NET网页
- asp.net-web-api – webapi中的attributerouting限制
- asp.net – 当我提交时,为什么我的文本框无法识别值已更改?
- asp.net-mvc-5 – 当EnableOptimizations为true时,CSS包为空
- asp.net – 我应该继续研究MVC 1.0上的项目还是停止学习MVC
- asp.net-mvc-2 – MVC2 – > MVC3升级
- asp.net-mvc – 为“简单”SaaS启动选择ORM(ASP.NET MVC)
- asp.net-mvc – Mvc http post方法给我“资源无法找到. ”
- asp.net-mvc – 如何在ASP.net MVC 4 RouteConfig.cs中使用
- 如何在非MVC ASP.NET应用程序中使用Fine Uploade
- 我的ASP.NET Web应用程序无法“找到”App_Code文
- ASP.NET Core Razor视图中的递归
- asp.net – 有人可以帮我理解这个堆栈跟踪吗?
- asp.net-web-api – 在WebApi和MVC项目之间共享S
- asp.net – ViewState的可接受大小是什么
- 与asp.net mvc的dotnetopenauth证明太沮丧使用
- asp.net-mvc – 如何将存储库传递给ASP.NET MVC中
- asp.net-web-api – ASP.NET Web API中的回调方法
- asp.net-web-api – 使用WebAPI PUT / POST请求启