为什么在 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);
}
}
基本上是 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
关于asp.net - 为什么在 VS2008/Casini 中开始调试时 Application_Init 会触发两次?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3306845/