Интегрированный пул приложений, модули и конвейер HttpApplication на IIS7.5 - PullRequest
0 голосов
/ 13 августа 2011

При наличии пула приложений, который работает в интегрированном режиме, пул приложений может обслуживать «запросы управляемых обработчиков» (GET aspx page), а также «запросы неуправляемых обработчиков» (GET jpg файл).

При обработке запроса MHR пул приложений должен учитывать все модули, но для не MHR не следует учитывать модули, помеченные предварительным условием управляемого обработчика.

Имеет ли приложение пул двух разных конвейеров HttpAplication (один для MHR, а другой для не MHR)? Или он имеет только один конвейер и может решить, какие обработчики событий httpAplication вызываются в зависимости от запроса?

Полагаю, пул приложений решает, будет ли запрос обработан или нет, прежде чем httpApplication запустит BeginRequest. По крайней мере, до AuthenticateRequest. Это верно?

Ответ по ссылке:

Все ресурсы, обслуживаемые IIS, сопоставляются с обработчиком в конфигурации. Если сопоставление конфигурации не существует, запросы на ресурс получат статус HTTP 404. В дополнение к отображению конфигурации, которое происходит до начала конвейера, отображение обработчика может быть изменено во время выполнения запроса ...

Функция Init модулей выполняется только один раз (может быть, при запуске пула приложений) независимо от предварительного условия управляемого обработчика?

Я полагаю, что пул приложений не создает весь конвейер (регистрация событий httpaplication и т. Д.) Для каждого запроса.

Заранее спасибо,

ОБНОВЛЕНИЕ 1: После прочтения ссылки я все еще «вижу» два разных конвейера, используя один пул приложений. Под разными конвейерами я подразумеваю два разных набора обработчиков событий, зарегистрированных в конвейере IIS:

BEGIN_REQUEST
AUTHENTICATE_REQUEST
AUTHORIZE_REQUEST
RESOLVE_REQUEST_CACHE
MAP_REQUEST_HANDLER
ACQUIRE_REQUEST_STATE
PRE_EXECUTE_REQUEST_HANDLER
EXECUTE_REQUEST_HANDLER
RELEASE_REQUEST_STATE
UPDATE_REQUEST_CACHE
LOG_REQUEST
END_REQUEST

Когда пул приложений в интегрированном режиме запускается, он может просматривать раздел модулей и может выполнять функцию Init каждого модуля (независимо от настройки предварительного условия). Функция Init каждого модуля регистрируется на некоторых этапах конвейера IIS. Но во время выполнения при обработке неуправляемых запросов следует пропустить обработчики событий модулей с управляемым обработчиком предварительных условий. Как это сделать?

UPDATE2: Насколько я понимаю, пул приложений (процесс Windows) содержит среду выполнения ASP.Net (httpRuntime в System.Web?). Эта среда выполнения содержит пул объектов httpApplication. При запуске пула приложений (или, возможно, до получения первого запроса) создается несколько httpApplications. В это время вызывается метод Init httpModules (в модулях в web.config). До появления режима интеграции IIS7 я думал, что все объекты httpApplication будут клонами, но поскольку в зависимости от типа запроса обработчика (управляемого или неуправляемого) некоторые httpModules следует учитывать или нет, я делаю вывод, что httpRutime содержит два пула httpApplication или, возможно, данный Объект httpApplication может обрабатывать только запросы управляемого обработчика или неуправляемого запроса hasler, но никогда два ...

1 Ответ

1 голос
/ 13 августа 2011

Я думаю, вы можете прочитать это http://blogs.msdn.com/b/tmarq/archive/2007/08/30/iis-7-0-asp-net-pipelines-modules-handlers-and-preconditions.aspx

Там вы видите, что IIS имеет только один конвейер.«Классический» способ обслуживания запросов asp.net начинается с события EXECUTE_REQUEST_HANDLER конвейера IIS.Думайте о ASP.NET в классическом режиме как о конвейере в конвейере IIS.

В интегрированном режиме вы можете в основном подключить управляемый код ко всей серии событий конвейера IIS, например, добавить аутентификацию форм asp.net встатические файлы, такие как .jpg

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...