Почему конструктор HttpApplication вызывается несколько раз - PullRequest
21 голосов
/ 06 июня 2009

Может кто-нибудь объяснить, почему конструктор пользовательского класса, производного от HttpApplication , вызывается несколько раз при запуске приложения?

Моя структура кода следующая:
- Мой Global класс в global.asax наследуется от CustomApp класса.
- CustomApp класс является производным от HttpApplication class

Класс Global создается при запуске, но когда я помещаю точку останова в конструктор, он вызывается несколько раз! Я думал, что должен быть создан только один экземпляр Application class?

Я не прав?

UPD : веб-сервер действительно может создать несколько HttpApplication экземпляров для обработки нескольких входящих запросов одновременно. Это становится особенно очевидным, когда вы помещаете точку останова в конструктор вашего потомка HttpApplication . От клиента будет ожидаться несколько запросов (контент http, файлы CSS и т. Д.), И для обслуживания каждого из них веб-сервер создаст новые экземпляры HttpApp. Итак, остерегайтесь этого при написании логики инициализации приложения.

Ответы [ 2 ]

15 голосов
/ 07 июня 2009

Я считаю, что среда выполнения ASP.NET может создавать более одного HttpApplication на домен приложения. Таким образом, HttpApplication.Init и Ctor могут вызываться более одного раза.

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

6 голосов
/ 05 августа 2011

Пожалуйста, посмотрите на сообщение global.asax в ASP.NET - оно объясняет, почему существует несколько экземпляров HttpApplication В основном есть два пула: специальный и обычный. Обычный пул содержит экземпляры HttpApplication, которые используются запросами (каждый запрос имеет свой собственный экземпляр HttpApplication). Специальный пул содержит объекты HttpApplication, используемые для событий уровня приложения (например, Application_Start, Application_Error).

...