通过global.asax在应用程序中保留数据

时间:2013-01-31 12:22:12

标签: c# asp.net asp.net-3.5 global-asax

我需要在C#/ ASP项目中存储一个全局可访问的列表 - 将其存储在服务器而不是数据库的全局应用程序中 - 因为只有在应用程序运行时才需要数据。

到目前为止,我尝试在应用程序启动(Global Asax)中创建一个列表 activePages= new List<ActivePage>(); Session["activePages"] = activePages;

由于我无法在此时设置会话,因此显然失败了。什么是正确的方法?

理想情况下,我希望能够在应用程序启动时设置空白列表,并从任何会话添加到列表中(即我可以同时从我的PC和笔记本电脑添加到此列表中)

我已经有了完成所有添加和管理的代码,但无法找到全局持久保存此列表的方法。另外,我如何在我的应用程序的其他页面上使用此列表?我以前不必触及全球的asax。

2 个答案:

答案 0 :(得分:3)

您需要查看Application State。使用Session将无法解决您访问应用程序的每个用户的问题,将创建一个新会话。此外,在一段时间不活动后Session被破坏。

   void Application_Start(object sender, EventArgs e) 
   {
        List<ActivePage> activePages= new List<ActivePage>();
        Application["ActivePages"] = activePages;
   }

答案 1 :(得分:0)

如果需要从任何地方访问数据,可以定义静态变量。在应用程序启动时,您可以将数据加载到此变量中:

public static List<ActivePage> ActivePages= new List<ActivePage>();

protected void Application_Start(object sender, EventArgs e)
{
   ActivePages = LoadFromDB()
}

您还可以随时随地向此列表添加值,因为变量是静态的。

但是 - 您以后想要对数据做什么?当IIS重新启动时,此列表的所有内容都将丢失。

您不能将Session用于此类全局存储。