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