Почему конструктор HttpApplication вызывается несколько раз
Может кто-нибудь объяснить, почему конструктор пользовательского класса, производного от HttpApplication, вызывается несколько раз при запуске приложения?
Моя структура кода следующая:
- Мой класс Global в global.asax является производным от класса CustomApp.
- класс CustomApp является производным от класса HttpApplication
Класс Global создается при запуске, но когда я помещаю точку останова в конструктор, он вызывается несколько раз! Я думал, что должен быть создан только один экземпляр класса Application?
Я ошибся?
UPD: веб-сервер действительно может создать несколько экземпляров HttpApplication для обработки нескольких запросов, поступающих одновременно. Это становится особенно очевидным, когда вы помещаете точку останова в конструктор вашего потомка HttpApplication. От клиента будет ожидаться несколько запросов (содержимое http, файлы CSS и т. Д.), И для обслуживания каждого из них веб-сервер создаст новые экземпляры HttpApp. Итак, остерегайтесь этого при написании логики инициализации приложения.
2 ответа
Я считаю, что среда выполнения ASP.NET может создавать более одного HttpApplication для каждого домена приложения. Таким образом, HttpApplication.Init и Ctor могут вызываться более одного раза.
Если вы хотите иметь код инициализации, который выполняется только один раз, вы должны использовать событие Application_Start, которое будет вызываться только один раз для каждого приложения.
Пожалуйста, посмотрите на сообщение global.asax в ASP.NET - оно объясняет, почему существует несколько экземпляров HttpApplication. В основном есть два бассейна: специальный и обычный. Обычный пул содержит экземпляры HttpApplication, которые используются запросами (каждый запрос имеет свой собственный экземпляр HttpApplication). Специальный пул содержит объекты HttpApplication, используемые для событий уровня приложения (например, Application_Start, Application_Error).