Почему конструктор 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).

Другие вопросы по тегам