Как определяется порядок выполнения для HttpModules?
Предположим, что оба FirstModule
и SecondModule
обрабатывают событие Application_BeginRequest
. Будет ли он выполняться в порядке, определенном в файле web.config?
<httpModules>
<add type="MyApp.FirstModule, MyApp" name="FirstModule"/>
<add type="MyApp.SecondModule, MyApp" name="SecondModule"/>
<add type="OtherApp.OtherModule, OtherApp" name="OtherModule"/>
</httpModules>
Существуют ли другие способы задания порядка?
Ответы
Ответ 1
Согласно этот пост форума, HttpModules выполняются в том порядке, в котором они были зарегистрированы. Это имеет смысл для меня, потому что в противном случае директивы <clear>
и <remove>
также не будут работать, как ожидалось, например. при использовании следующим образом:
<httpModules>
<clear/>
<add... />
</httpModules>
Ответ 2
Согласно Справочнику по информационным ресурсам Internet Information Services (IIS) 7.0 из издательства Microsoft Press,
Чтобы разрешить такие зависимости относительного порядка, администратор может контролировать относительный порядок модулей, изменяя порядок, в котором они перечислены в разделе модулей.
Это работает, потому что сервер использует порядок в разделе конфигурации модулей, чтобы упорядочить выполнение модуля на каждом этапе обработки запроса. Поместив модуль A перед модулем B в списке, вы можете разрешить выполнение модуля A перед модулем B.
Ответ 3
Я не думаю, что вы можете гарантировать или указать заказ, который будет запущен httpmodules. Если SecondModule зависит от FirstModule, лучше всего просто объединить их функциональность в 1 httpmodule.