2011-03-16 9 views
6

Tengo un sitio que usa ISAPI Rewrite, así como un HttpModule personalizado que hace redirecciones Url y reescribe.IIS7 HttpModule y la orden de ejecución del filtro ISAPI

En IIS 6, todo funcionó bien: el filtro de reescritura ISAPI se ejecutaría primero, seguido del HttpModule. En IIS 7 (modo integrado) el orden es ahora el inverso, lo que plantea un problema.

Mi problema, específicamente, es que el HttpModule tiene una condición donde emitirá una reescritura de Url usando context.RewritePath. Se agregará explícitamente "index.aspx" a la ruta si no se proporcionó ningún documento, por lo que una solicitud a /test/ se reescribe en /test/index.aspx.

En algún momento después de reescribir la ruta, se ejecuta el filtro ISAPI Rewrite. Tenemos una regla que hace lo contrario al módulo: una solicitud al /test/index.aspx se redirecciona 301 al /test/. Por lo tanto, tenemos un ciclo sin fin.

¿Cómo se determina el orden de ejecución de HttpModules y ISAPI Filters en IIS 7? ¿Se puede cambiar la orden? Encontré this question, pero realmente no me ayudó. No soy un maestro de IIS 7, pero sí entiendo hasta cierto punto que los módulos y los filtros ISAPI se ejecutan "juntos". Desafortunadamente, todavía se administran de manera diferente y no puedo imaginar cómo forzar a uno a correr antes que el otro. ¡Ayuda!

Nota: supongamos que no puedo cambiar el código existente. Funcionó en IIS 6. Solo quiero saber si hay una forma de hacerlo funcionar en el modo integrado de IIS 7.

Respuesta

0

Eche un vistazo al siguiente artículo que explica el IIS 7 pipeline. El orden de la tubería no se puede cambiar. No estoy seguro de si esta es una opción o no, pero podría reemplazar la Reescritura ISAPI con el IIS URL Rewrite module. Esto puede permitir que su aplicación se ejecute en el modo de interconexión integrada; de lo contrario, es posible que necesite cambiar su grupo de aplicaciones para que se ejecute en modo clásico.

2

También he tenido un problema similar en el que pensé que reescribe ISAPI se ejecutan en primer lugar, pero al parecer no es así como funcionan las cosas con IIS7

encontré este hilo que establece

en el modo integrado los eventos para el módulo nativo, isapi y .net se llaman juntos

por ej. si es BeginRequest, entonces el módulo nativo es el primero en llegar, luego isapi, luego el código .net. Después de eso, todo se repetirá para AuthenticateRequest ...

Hace algún tiempo solía ser así: isapi ha procesado todos los eventos, y solo después de invocar .net. Esto es probablemente lo que has asumido.

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

Es de esperar que ayuda a

Cuestiones relacionadas