首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SessionID抛出空异常

SessionID抛出空异常
EN

Stack Overflow用户
提问于 2013-10-29 20:08:47
回答 1查看 1.6K关注 0票数 2

我有一个对象,它将System.Web.SessionState.HttpSessionState对象封装为其数据成员之一。很少(以至于我们无法准确地在何时或如何重现),在访问NullReferenceException时,我们会得到这个对象的一个customSession.Session.SessionID错误。

我使用调试器来跟踪对象,customSession.Session不是null。它是一个有效的HttpSessionState对象。

代码语言:javascript
复制
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类型的例外。

有人知道这是否只是Visual开发服务器中的一个bug吗?我只是不希望这个问题发生在生产发行版上,而解决这个问题的唯一方法就是重启IIS。

-编辑--

其他信息:

我使用的是“当公共语言运行时异常抛出时中断”选项,因此所发生的事情是系统试图访问CustomSession对象,如cs.Session.SessionID,并获得一个null-ref异常,调试器启动。然后我使用watch窗口并在手表中插入"cs.Session“,它显示了会话对象的所有属性,SessionID的行表示它抛出一个空引用异常。如果不手动处理,此空引用异常将导致应用程序中断。

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

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

-附加(oct30)

发生错误的行是if-语句:

代码语言:javascript
复制
foreach (CustomSession cs in allSessions) {
    if (cs.Session.SessionID == curSession.Session.SessionID) {
        // do stuff
    }
}

"cs“和"curSession”对象都是null,此时每个对象的"Session“属性也不是null。

EN

回答 1

Stack Overflow用户

发布于 2013-10-29 20:56:20

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

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

由于您选择了“抛出异常时的中断”,并且可能没有选择“只有我的代码”,所以它正在中断。因为是你要求的。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19668088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档