SessionID抛出null异常

时间:2013-10-29 20:08:48

标签: c# asp.net

我有一个对象,它将System.Web.SessionState.HttpSessionState对象封装为其数据成员之一。很少(我们无法准确再现何时或如何)我们将在访问customSession.Session.SessionID

时获取此对象的NullReferenceException错误

我使用调试器来跟踪对象,customSession.Session不是null。它是一个有效的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引发了System.NullReferenceException类型的异常。

有谁知道这只是Visual Studio开发服务器中的错误吗?我只是不希望在生产版本上出现此问题,修复它的唯一方法是重新启动IIS。

- 编辑 -

其他信息:

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

我能够通过重复修改App_Code目录中的代码来重现错误(我认为我做了大约5或6次更改)。我不确定这是否是这个问题发生的唯一方式,因为其他人已经在他们怀疑会话超时之后报告了这一点。无论如何,它似乎发生在来自global.asax的“Session_End”事件中。但是错误发生在“Session.Abandon()”语句被命中之前。

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

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

发生错误的行是if语句:

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

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

1 个答案:

答案 0 :(得分:-1)

您正在观看通常由框架处理的异常。

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

由于您选择了“在抛出异常时中断”并且可能未选择“仅我的代码”,因此它正在破坏。因为你问过它。