在VS2008 / Casini中开始调试时,为什么Application_Init会触发两次?

时间:2010-07-22 08:01:55

标签: asp.net asp.net-mvc visual-studio-2008 cassini

为什么在VS2008 / Casini中开始调试时,Application_Init会触发两次?

是的,它发生在global.asax中。虽然看似相当随意,但偶尔会发生一次。

1 个答案:

答案 0 :(得分:6)

我假设您在ASP.NET MVC应用程序中引用了Global.asax文件。请注意,您的global.asax扩展了System.Web.HttpApplication,例如:

public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        // (snip)
    }

    protected void Application_Init()
    {
        // Why is this running twice?
    }

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        RegisterRoutes(RouteTable.Routes);
    }
}

基本上multiple HttpApplication instances are being instantiated to serve multiple incoming HTTP requests。请求完成后,HttpApplication实例将返回池中再次重用,类似于数据库连接池。

您无法预测将创建多少个HttpApplication实例,基本上ASP.NET工作进程将创建尽可能多的来满足来自您的Web应用程序的HTTP请求的需求。您的Application_Init()被调用两次,因为正在创建2个HttpApplication实例,即使它只是您运行您的网站。可能是您引入了HTML中的其他服务器端资源(JavaScript文件,CSS等),或者可能是Ajax请求。

如果您想保证代码只运行一次,那么将它放在Global.asax的Application_Start()方法中。 Or use a Bootstrapper