在VS2008/Casini中开始调试时,为什么Application_Init会触发两次?
是的,它发生在global.asax中.虽然看似相当随意,但偶尔只会发生一次.
我假设您在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); } }
基本上,多个HttpApplication实例被实例化以服务多个传入的HTTP请求.请求完成后,HttpApplication实例将返回池中再次重用,类似于数据库连接池.
您无法预测将创建多少个HttpApplication实例,基本上ASP.NET工作进程将创建所需数量,以满足来自Web应用程序的HTTP请求的需求.您的Application_Init()被调用两次,因为正在创建2个HttpApplication实例,即使它只是您运行您的网站.可能是您引入了HTML中的其他服务器端资源(JavaScript文件,CSS等),或者可能是Ajax请求.
如果要保证代码只运行一次,则将其放在Global.asax的Application_Start()方法中.或者使用Bootstrapper