为什么在 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/

10-08 20:32