Почему Application_Init срабатывает дважды при запуске отладки в VS2008 / Casini? - PullRequest
4 голосов
/ 22 июля 2010

Почему Application_Init срабатывает дважды при запуске отладки в VS2008 / Casini?

Да, это происходит в global.asax. Кажется довольно случайным, только случается время от времени.

1 Ответ

6 голосов
/ 22 июля 2010

Я предполагаю, что вы ссылаетесь на файл Global.asax в приложении ASP.NET MVC.Обратите внимание, что ваш 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.В процессе будет создано столько запросов, сколько необходимо для удовлетворения запросов HTTP-запросов к вашему веб-приложению.Ваш Application_Init () вызывается дважды, потому что создаются 2 экземпляра HttpApplication, даже если ваш сайт запущен только вами.Возможно, в вашем HTML-файле есть ссылки на другие серверные ресурсы (файлы JavaScript, CSS и т. Д.) Или, возможно, запрос Ajax.

Если вы хотите гарантировать, что код запускается только один раззатем поместите его в метод Application_Start () в вашем Global.asax. Или используйте Bootstrapper

...