Порядок выполнения IIS7 HttpModule и ISAPI Filter - PullRequest
6 голосов
/ 16 марта 2011

У меня есть сайт, использующий ISAPI Rewrite , а также пользовательский модуль HttpModule, который одновременно выполняет перенаправление и перезапись Url.

В IIS 6 все работало нормально: сначала запускался фильтр перезаписи ISAPI, а затем модуль HttpModule.В IIS 7 (интегрированный режим) порядок теперь обратный, что создает проблему.

Моя проблема, в частности, заключается в том, что HttpModule имеет условие, при котором он генерирует перезапись URL-адреса с использованием context.RewritePath.Он явно добавит «index.aspx» к пути, если документ не был предоставлен, поэтому запрос к /test/ переписывается в /test/index.aspx.

В какой-то момент после того, как путь переписан, ISAPI Rewriteфильтр выполняется.У нас есть правило, противоположное модулю: запрос на /test/index.aspx перенаправляется 301 на /test/.Таким образом, у нас есть бесконечный цикл.

Как определяется порядок выполнения HttpModules и ISAPI-фильтров в IIS 7? Можно ли изменить порядок?Я нашел этот вопрос , но это не очень помогло.Я не владелец IIS 7, но я до некоторой степени понимаю, что модули и фильтры ISAPI работают «вместе».К сожалению, они все еще управляются по-разному, и я не могу понять, как заставить одного работать раньше другого.Справка!

Примечание: предположим, я не могу изменить существующий код.Это работало в IIS 6. Я просто хочу знать, есть ли способ заставить его работать в интегрированном режиме IIS 7.

Ответы [ 2 ]

3 голосов
/ 01 мая 2012

У меня также была похожая проблема, когда я думал, что перезаписи ISAPI выполняются первыми, но, видимо, с IIS7

это не так

Я нашел эту тему, в которой говорится

В интегрированном режиме события для собственного модуля, isapi и .net называются смешанными вместе

например. если это BeginRequest, то первым приходит родной модуль, затем isapi, затем код .net. После этого все будет повторяться для AuthenticateRequest ...

Некоторое время назад это было так: isapi обработал все события, и только после этого .net был вызван. Это, вероятно, то, что вы предположили.

http://www.helicontech.com/forum/18447-ISAPI_RW3_Lite_on_IIS_7x_Integrated_mode.html

Надеюсь, это поможет

0 голосов
/ 17 мая 2011

Взгляните на следующую статью, в которой объясняется конвейер IIS 7 .Порядок конвейера не может быть изменен.Не уверен, если это опция или нет, но вы могли бы потенциально заменить ISAPI Rewrite на модуль IIS URL Rewrite .Это может позволить вашему приложению работать в режиме интегрированного конвейера, в противном случае вам может потребоваться переключить пул приложений для запуска в классическом режиме.

...