¿Cuál es la diferencia entre el modo de canalización 'clásico' e 'integrado' en IIS7?

491

Estaba implementando una aplicación ASP.NET MVC anoche y descubrí que es menos trabajo implementarlo con IIS7 configurado en modo integrado. Mi pregunta es ¿cuál es la diferencia? ¿Y cuáles son las implicaciones de usar uno u otro?

Jon Erickson
fuente
10
¿Cómo fue menos trabajo implementar con modo integrado vs clásico? Simplemente curioso
Peter Lillevold el
99
@ Peter: las URL sin extensión requieren ser mapeadas manualmente en modo clásico.
Mehrdad Afshari
2
incluso en el MVC Global.asax las notas se leen: Para obtener instrucciones sobre cómo habilitar el modo clásico IIS6 o IIS7, visite go.microsoft.com/?LinkId=9394801 . O simplemente puede activar el modo integrado e incluir el ensamblaje System.Web.Mvc y todo simplemente funciona.
Jon Erickson el

Respuestas:

643

El modo clásico (el único modo en IIS6 y versiones inferiores) es un modo en el que IIS solo funciona con extensiones ISAPI y filtros ISAPI directamente. De hecho, en este modo, ASP.NET es solo una extensión ISAPI (aspnet_isapi.dll) y un filtro ISAPI (aspnet_filter.dll). IIS solo trata ASP.NET como un complemento externo implementado en ISAPI y funciona con él como un recuadro negro (y solo cuando es necesario entregar la solicitud a ASP.NET). En este modo, ASP.NET no es muy diferente de PHP u otras tecnologías para IIS.

El modo integrado, por otro lado, es un nuevo modo en IIS7 donde la tubería de IIS está estrechamente integrada (es decir, es la misma) que la tubería de solicitud de ASP.NET. ASP.NET puede ver cada solicitud que quiera y manipular las cosas en el camino. ASP.NET ya no se trata como un complemento externo. Está completamente mezclado e integrado en IIS. En este modo, los ASP.NET HttpModulebásicamente tienen casi tanta potencia como habría tenido un filtro ISAPI y los ASP.NET HttpHandlerpueden tener una capacidad casi equivalente a la que podría tener una extensión ISAPI. En este modo, ASP.NET es básicamente una parte de IIS.

Mehrdad Afshari
fuente
8
se integra más lento que el clásico?
Alex Nolasco
No estoy seguro de si es correcto decir que asp.net es parte de IIS. Parecen productos separados (aunque integrados). Podría estar equivocado.
Andrew Savinykh
@MehrdadAfshari ¿Tratar con HttpModulesmétodos / eventos en iis7tiene más funcionalidad que en iis6? Puedes profundizar sobre eso ?
Royi Namir
Y para agregar, en el modo de canalización integrada, cada etapa de la tubería de solicitud se expone como un evento en el que la asignación de los controladores podría anularse en la aplicación. Por ejemplo, uno puede definir un recurso incorporado HttpHandler, para cierto tipo de rutas y asignarlas a su controlador personalizado a través del controlador de ruta.
Ren
1
Una respuesta perfecta a dicha pregunta, al menos debe referirse a uno de los artículos de Microsoft, como iis.net/learn/application-frameworks/… .
Lex Li
115

Modo de grupo de aplicaciones integrado

Cuando un grupo de aplicaciones está en modo Integrado, puede aprovechar la arquitectura integrada de procesamiento de solicitudes de IIS y ASP.NET. Cuando un proceso de trabajo en un grupo de aplicaciones recibe una solicitud, la solicitud pasa a través de una lista ordenada de eventos. Cada evento llama a los módulos nativos y administrados necesarios para procesar porciones de la solicitud y generar la respuesta.

Existen varios beneficios al ejecutar grupos de aplicaciones en modo integrado. Primero, los modelos de procesamiento de solicitudes de IIS y ASP.NET se integran en un modelo de proceso unificado. Este modelo elimina los pasos que se duplicaron previamente en IIS y ASP.NET, como la autenticación. Además, el modo integrado permite la disponibilidad de funciones administradas para todos los tipos de contenido.

Modo clásico de grupo de aplicaciones

Cuando un grupo de aplicaciones está en modo Clásico, IIS 7.0 maneja las solicitudes como en el modo de aislamiento de proceso de trabajo de IIS 6.0. Las solicitudes de ASP.NET primero pasan por los pasos de procesamiento nativos en IIS y luego se enrutan a Aspnet_isapi.dll para procesar el código administrado en el tiempo de ejecución administrado. Finalmente, la solicitud se enruta de nuevo a través de IIS para enviar la respuesta.

Esta separación de los modelos de procesamiento de solicitudes IIS y ASP.NET da como resultado la duplicación de algunos pasos de procesamiento, como la autenticación y la autorización. Además, las funciones de código administrado, como la autenticación de formularios, solo están disponibles para aplicaciones ASP.NET o aplicaciones para las que ha asignado un script a todas las solicitudes que debe manejar aspnet_isapi.dll.

Asegúrese de probar la compatibilidad de sus aplicaciones existentes en modo integrado antes de actualizar un entorno de producción a IIS 7.0 y asignar aplicaciones a grupos de aplicaciones en modo integrado. Solo debe agregar una aplicación a un grupo de aplicaciones en modo clásico si la aplicación no funciona en modo integrado. Por ejemplo, su aplicación podría depender de un token de autenticación pasado de IIS al tiempo de ejecución administrado y, debido a la nueva arquitectura en IIS 7.0, el proceso interrumpe su aplicación.

Tomado de: ¿Cuál es la diferencia entre DefaultAppPool y Classic .NET AppPool en IIS7?

Fuente original: Introducción a la arquitectura IIS

BrainCoder
fuente
28
Oración clave en el último párrafo: "Solo debe agregar una aplicación a un grupo de aplicaciones en modo clásico si la aplicación no funciona en modo integrado".
DavidRR
66
@JsonStatham: una razón para esto es que el modo integrado no puede usar la suplantación de ASP.NET (Sitios> YourSite> IIS> Autenticación). Si tiene un sitio de Intranet y está utilizando la autenticación de Windows, esta es una consideración importante. enlace
usuario3308241
11

IIS 6.0 y versiones anteriores:

ASP.NET se integró con IIS a través de una extensión ISAPI, una API C (API basada en lenguaje de programación C) y expuso su propia aplicación y modelo de procesamiento de solicitudes.

Esto expuso efectivamente dos tuberías de servidor (solicitud / respuesta) separadas, una para filtros ISAPI nativos y componentes de extensión, y otra para componentes de aplicaciones administradas. Los componentes de ASP.NET se ejecutarían completamente dentro de la burbuja de extensión ISAPI de ASP.NET Y SOLO para solicitudes asignadas a ASP.NET en la configuración del mapa de secuencia de comandos de IIS.

Las solicitudes a tipos de contenido que no son ASP.NET: - imágenes, archivos de texto, páginas HTML y páginas ASP sin script, fueron procesadas por IIS u otras extensiones ISAPI y NO fueron visibles para ASP.NET.

La principal limitación de este modelo fue que los servicios proporcionados por los módulos ASP.NET y el código de aplicación ASP.NET personalizado NO estaban disponibles para solicitudes que no son ASP.NET

¿Qué es un MAPA DE ESCRITURA?

Los mapas de script se utilizan para asociar extensiones de archivo con el controlador ISAPI que se ejecuta cuando se solicita ese tipo de archivo. El mapa de script también tiene una configuración opcional que verifica que el archivo físico asociado con la solicitud existe antes de permitir que la solicitud sea procesada

Un buen ejemplo puede ser seen here

IIS 7 y superior

IIS 7.0 y superior se han rediseñado desde cero para proporcionar un nuevo ISAPI basado en API C ++.

IIS 7.0 y superior integra el tiempo de ejecución ASP.NET con la funcionalidad principal del servidor web, proporcionando una canalización de procesamiento de solicitud unificada (única) que está expuesta a componentes nativos y administrados conocidos como módulos (IHttpModules)

Lo que esto significa es que IIS 7 procesa las solicitudes que llegan para cualquier tipo de contenido, con ambos, NON ASP.NET Modules / native IIS modulesy ASP.NET modulesbrindando procesamiento de solicitudes en todas las etapas. Esta es la razón por la cual los tipos de contenido NO ASP.NET (.html, archivos estáticos) pueden ser manejados por módulos .NET .

  • Puede crear nuevos módulos administrados ( IHttpModule) que tengan la capacidad de ejecutarse para todo el contenido de la aplicación, y proporcionó un conjunto mejorado de servicios de procesamiento de solicitudes a su aplicación.
  • Agregar nuevos controladores gestionados ( IHttpHandler)
RC
fuente
5

En modo clásico, IIS funciona h Extensiones ISAPI y filtros ISAPI directamente. Y usa dos líneas de tubería, una para el código nativo y otra para el código administrado. Simplemente puede decir que en modo clásico IIS 7.x funciona igual que IIS 6 y no obtiene beneficios adicionales de las características de IIS 7.x.

En modo integrado, IIS y ASP.Net están estrechamente acoplados en lugar de depender solo de dos DLL en Asp.net como en el caso del modo clásico.

Mian
fuente