gpt4 book ai didi

c# - SessionID 抛出 null 异常

转载 作者:太空宇宙 更新时间:2023-11-03 17:02:39 25 4
gpt4 key购买 nike

我有一个对象,它封装了一个 System.Web.SessionState.HttpSessionState 对象作为它的数据成员之一。在访问 customSession.Session.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

Keys 中有 4 条记录。

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

"cs.Session.SessionID threw an exception of type System.NullReferenceException.

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

-- 编辑--

附加信息:

我正在使用“抛出公共(public)语言运行时异常时中断”选项,所以发生的事情是系统正在尝试访问 CustomSession 对象,作为 cs.Session.SessionID 并获取 null-ref 异常,并且调试器启动。然后我使用监 window 口并在监视中放入“cs.Session”,它显示了 Session 对象的所有属性,SessionID 的行表示它抛出空引用异常。如果不手动处理,此 null ref 异常会导致应用程序中断。

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

我已确认我可以访问存储在 session 中的值。唯一出错的是访问 SessionID。

--- 附加(oct30)----

发生错误的行是if语句:

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

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

最佳答案

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

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

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

关于c# - SessionID 抛出 null 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19668088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com