global.asax范围和终身澄清

时间:2011-04-05 07:32:31

标签: asp.net global-asax application-state

我需要在我正在处理的项目中实现几个应用程序级行为。 我需要掌握几件事情: 1.我在哪里以及如何定义应用程序级变量? 2.这些变量的生命周期是多少?或更准确地说,他们在什么情况下被丢弃了? (应用程序池回收?应用程序二进制文件从内存中删除并在下一个请求中重新编译?等等) 3. global.asax文件是放置会话计数器的好地方,还是将值存储到数据库/文件中是一种更好的方法来保存这种数据?

欢迎提出任何意见或建议。 谢谢! -Elad

1 个答案:

答案 0 :(得分:3)

应用程序级变量具有应用程序生命周期。这意味着应用程序池被回收,它们被丢弃了 应用程序池可以出于不同的原因进行回收。可以配置IIS 6/7,以便在一定时间后,在一定数量的请求之后或按指定的时间间隔回收应用程序池。 您可以这样设置应用程序变量:

Application["DbConfig"] = "my value";

但是如果您尝试在不同的地方设置/访问,则必须注意可能遇到的问题。您必须采用一种方法在更新时锁定变量。

我使用web.config获取所有配置参数,然后我创建了自己的类,用于存储应用程序字段:

namespace Web.My
{
    public class Application
    {
        public static string ApplicationStorageFolder
        {
            get
            {
                return (System.IO.Path.Combine(HttpContext.Current.Server.MapPath("~"), "_AppStorage"));
            }
        }
    }
}

如果我需要设置一些字段,我会在应用程序启动时Application_Start执行此操作 如果需要保留信息,可以创建自己的配置文件(xml或简单文本),以便在应用程序启动和关闭时存储和读取值。您可以在XML文件中序列化您的类,以便您可以轻松地重新填充属性。 db也可以。 我会对会话计数器做同样的事情。