Global.asax.cs扩展的HttpApplication类是否在应用程序的生命周期内存在?
在什么时候可以创建/销毁实例?
我正在经历两次application_start触发,它似乎与应用程序池回收有关,并且通过此过程发出请求。我还没有完全调试它,我现在没有时间深入研究它。那么,就上述问题而言,以下是一个安全的解决方案吗?
public class MvcApplication : System.Web.HttpApplication
{
public static object syncLock = new object();
public static bool applicationBooted;
protected void Application_Start()
{
if(!applicationBooted)
lock (syncLock)
if(!applicationBooted)
{
// bootstrap here
applicationBooted = true;
}
}
}
答案 0 :(得分:7)
如果您在日志中看到事件两次,请检查应用程序池是否设置为生成单个工作进程。每个工作进程都将创建自己的HttpAppication实例。
答案 1 :(得分:4)
从MSDN在线页面
所有核心应用程序对象之后 已经初始化,申请 是通过创建一个实例来启动的 HttpApplication类。如果 应用程序有一个Global.asax文件, ASP.NET改为创建一个实例 派生的Global.asax类 来自HttpApplication类和 使用派生类来表示 申请。