SessionID引发null异常

本文关键字:异常 null 引发 SessionID | 更新日期: 2023-09-27 18:37:25

我有一个对象,它将System.Web.SessionState.HttpSessionState对象封装为其数据成员之一。访问customSession.SessionID 时,我们很少会遇到此对象的NullReferenceException错误(以至于我们无法准确再现时间或方式(

我已经使用调试器来跟踪对象,并且customSession.Session不为空。它是一个有效的HttpSessionState对象。

Mode: InProc
StaticObjects: {System.Web.HttpStaticObjectsCollection}
SyncRoot: {System.Web.SessionState.HttpSessionStateContainer}
Keys: {System.Collection.SpecializedNameObjectCollectionBase.KeysCollection}
IsNewSession: true
IsReadOnly: false

密钥中有4条记录。

但即使在调试器中,如果我探索对象并尝试获取SessionID,它也会显示

"cs.Session.SessionID引发了System.NullReferenceException类型的异常。

有人知道这是否只是VisualStudio开发服务器中的一个错误吗?我只是不想在生产版本中出现这个问题,唯一的解决方法就是重新启动IIS。

--编辑--

附加信息:

我使用的是"在抛出公共语言运行时异常时中断"选项,因此发生的情况是系统试图访问CustomSession对象,如cs。Session.SessionID并得到一个null引用异常,调试器开始工作。然后我使用监视窗口,在监视中放入"cs.Session",它显示Session对象的所有属性,SessionID的行表示它抛出一个null参考异常。如果不手动处理,此null ref异常会导致应用程序中断。

我能够通过反复修改App_code目录中的代码来重现错误(我认为大约进行了5到6次更改(。我不确定这是否是这个问题发生的唯一方式,因为这里的其他人报告说,这是在他们怀疑会话超时后发生的。在任何情况下,它似乎发生在global.asax发出的"Session_End"事件中。但错误发生在"Session.Advant(("语句被命中之前。

我已确认可以访问会话中存储的值。唯一出现错误的是访问SessionID。

---附加(10月30日(----

发生错误的行是if语句:

foreach (CustomSession cs in allSessions) {
    if (cs.Session.SessionID == curSession.Session.SessionID) {
        // do stuff
    }
}

"cs"answers"curSession"对象都不为null,此时每个对象的"Session"属性也不为null。

SessionID引发null异常

您正在观察一个异常,该异常通常由框架处理。

本质上,它实现了一个每个连接的单例模式,使用异常来检测会话何时不存在。因此,它只使用会话对象,如果抛出异常,它会当场创建一个异常并继续

由于您选择了"引发异常时中断",而可能没有选择"只是我的代码",所以它正在中断。因为你要求它。