我正在使用以下代码进行会话管理。
public class MyClass
{
public static int SomeProperty
{
get { return (int)HttpContext.Current.Session["MyID"]; }
set { HttpContext.Current.Session["MyID"] = value; }
}
}
问题是偶尔我得到“对象引用未设置为对象的实例”。在get { return (int)HttpContext.Current.Session["MyID"]; }
上,虽然我知道MyID是在会话中设置的。在我看来,由于某种原因会话被破坏了。任何想法为什么会发生?
我没有为web.config中的会话状态定义任何内容,这让我相信这是InProc服务器的一个案例
答案 0 :(得分:6)
InProc会话状态受appDomain回收。每次更改站点的代码或配置时,都会发生这种情况。 IIS也可以不时自动回收它。
您必须始终假设它可以为null,并相应地处理它。
答案 1 :(得分:0)
在proc会话中,状态很常见。例如,如果您的应用程序暂时没有收到任何请求,IIS将默认将其关闭(丢失任何inproc会话状态),直到请求进入。如果您需要会话状态保持,请查看挂钩另一个提供程序,如作为SQL之一。更多信息:http://msdn.microsoft.com/en-us/library/aa479041.aspx#aspnetsessionstate_topic6
答案 2 :(得分:0)
要检查的一件事是,您是要清除会话变量还是在Web应用程序中的任何位置重新创建会话变量。如果是这样,当您的应用查找现在已删除的变量时,用户单击其浏览器中的后退导航,清除会话状态,然后在其浏览器中转发导航,可能会导致缺少会话变量。
答案 3 :(得分:0)
我希望这对某人Losing Session State有所帮助,因为它对我有所帮助。 以我为例,正是文件的生成使会话状态变得松散。 将文件生成逻辑移动到简单的控制台应用程序会有所帮助。