为什么在 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 请求 http://odetocode.com/articles/89.aspx。请求完成后,HttpApplication 实例将返回到池中以供再次重用,类似于数据库连接池。
您无法预测将创建多少个 HttpApplication 实例,基本上 ASP.NET 工作进程将创建尽可能多的实例,以满足访问您的 Web 应用程序的 HTTP 请求的需求。您的 Application_Init() 被调用两次,因为正在创建 2 个 HttpApplication 实例,即使只是您在运行您的网站。可能是您在被拉入的 HTML 中引用了其他服务器端资源(JavaScript 文件、CSS 等),或者可能是 Ajax 请求。
如果您想保证代码只运行一次,请将其放入 Global.asax 中的 Application_Start() 方法中。或者使用引导程序 http://www.dominicpettifer.co.uk/Blog/42/put-an-ioc-powered-bootstrapper-in-your-asp-net-mvc-application
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)