Жизненный цикл ASP.NET HttpApplication

Существует ли класс HttpApplication, расширенный Global.asax.cs, для срока службы приложения?

В какой момент могут быть созданы/уничтожены экземпляры?

Я испытываю двухкратное срабатывание application_start, похоже, что это связано с повторной обработкой пула приложений и делает запросы частично, хотя этот процесс. Я не совсем отладил его, и у меня нет времени на это, чтобы сделать это в глубину. Итак, в связи с указанным выше вопросом, существует ли безопасное решение?

public class MvcApplication : System.Web.HttpApplication
{
    public static object syncLock = new object();
    public static bool applicationBooted;

    protected void Application_Start()
    {
        if(!applicationBooted)
        lock (syncLock)
        if(!applicationBooted)
        {
            // bootstrap here
            applicationBooted = true;
        }
    }
}

Ответ 1

Если вы дважды видите событие в своих журналах, убедитесь, что пул приложений настроен на создание отдельного рабочего процесса. Каждый рабочий процесс создаст свой собственный экземпляр HttpAppication.

Ответ 2

На онлайн-странице MSDN

После всех объектов основного приложения были инициализированы, приложение запускается путем создания экземпляра класс HttpApplication. Если приложение имеет файл Global.asax, ASP.NET вместо этого создает экземпляр класс Global.asax, который получен из класса HttpApplication и использует производный класс для представления приложения.

Обзор жизненного цикла приложения ASP.NET