为什么在VS2008 / Casini中开始调试时,Application_Init会触发两次?
是的,它发生在global.asax中。虽然看似相当随意,但偶尔会发生一次。
答案 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