代码之家  ›  专栏  ›  技术社区  ›  Jeff

一个ASP.NET应用程序启动多少次

  •  2
  • Jeff  · 技术社区  · 14 年前

    一个ASP.NET应用程序启动多少次?

    我想每个AppDomain运行一次(特别是RegisterRoutes)。如果我把要执行的代码放到全球.asax在应用程序启动时,一切都很好(或者看起来是这样),代码似乎只执行一次。

    但是如果我在web.config文件执行以下操作:

    public class SomeHttpModule:IHttpModule
    {
        public void Init(HttpApplication context)
        {
            new SomeRunner().Run();
        }
    
        public void Dispose()
        {
        }
    }
    
    public class SomeRunner
    {
        private static object syncLock = new object();
        private static bool hasRun;
    
        public void Run()
        {
            lock(syncLock)
            {
                if (!hasRun)
                {
                    hasRun = true;
                    RegisterRoutes();
                }
            }
        }
    
        public void RegisterRoutes()
        {
            // Register MVC Routes
        }
    }
    

    当我在visualstudio中点击“go”时,我的调试器在Run方法的第一行的断点处停止…但是如果我检查路由表。路由集合…MVC路由已经注册(意味着RegisterRoutes必须已经被调用)…即使hasRun为false!

    在visualstudio调试IIS网站时,这是不是有点奇怪?我知道IIS可以在一个AppDomain中托管两个http应用程序,这会让某个httpmodule在同一AppDomain中初始化两次…对吗?但我的静态bool hasRun怎么可能还是假的???

    1 回复  |  直到 14 年前
        1
  •  1
  •   Guffa    14 年前

    web应用程序可以多次启动。每当IIS认为应用程序未被使用时,应用程序就可以关闭,当下一个请求传入时,应用程序将重新启动。

    此外,应用程序可能被设置为每天循环使用,在这种情况下,它至少每天启动一次。

    我不知道为什么在调试应用程序时会启动两次,但这可能与调试器如何连接到进程有关。

    静态变量不能从应用程序的一个实例保存到下一个实例的原因是它们是独立的实例。当应用程序再次启动时,它从它自己的一组变量开始。它从一个全新的虚拟地址空间开始,因此上一个实例中没有任何内容。