IIS 5 y 6 funcionan de manera diferente.
Cuando llega una solicitud, IIS verifica el mapa del script (mapa de extensión) y dirige la solicitud a aspnet_isapi.dll. El funcionamiento de esta DLL y cómo las solicitudes ingresan al tiempo de ejecución de ASP.NET son diferentes en IIS5 y 6. La Figura 2 muestra una descripción general aproximada de este proceso.
En IIS5, aspnet_isapi.dll se aloja directamente en el proceso inetinfo.exe. Si establece el nivel de aislamiento del sitio web o directorio virtual en medio o alto, se alojará en un proceso de trabajo independiente (aislado) de IIS. Cuando llegue la primera solicitud de ASP.NET, la DLL (aspnet_isapi.dll) iniciará otro proceso nuevo aspnet_wp.exe y enrutará la solicitud a este proceso para su procesamiento. Este proceso, a su vez, carga y aloja el tiempo de ejecución de .NET. Cada solicitud enviada a la DLL ISAPI se enruta a este proceso a través de una llamada de canalización con nombre.
Figura 2: una vista de alto nivel del flujo de solicitudes desde IIS al tiempo de ejecución de ASP.NET y a través del proceso de procesamiento de solicitudes. IIS5 e IIS6 interactúan con ASP.NET de diferentes maneras, pero una vez que la solicitud llega a la canalización de ASP.NET, todo el flujo de procesamiento es el mismo.
A diferencia de las versiones anteriores del servidor, IIS6 ha sido completamente optimizado para ASP.NET.
IIS6: larga vida al grupo de aplicaciones
IIS6 realiza cambios significativos en el modelo de procesamiento. IIS ya no aloja directamente código ejecutable externo como las extensiones ISAPI. IIS siempre crea un subproceso de trabajo separado (un grupo de aplicaciones) y todo el procesamiento ocurre en este proceso, incluida la ejecución de archivos DLL de ISAPI. La agrupación de aplicaciones es una gran mejora en IIS6 porque permite un control muy detallado sobre qué código se ejecutará en un hilo determinado. Los grupos de aplicaciones se pueden configurar en cada ruta virtual o en todo el sitio web, lo que le permite aislar cada aplicación web en su propio proceso para que cada aplicación esté conectada a otras aplicaciones web que se ejecutan en la misma máquina. Si un proceso falla, no afectará a otros procesos (al menos desde el punto de vista del procesamiento web).
No sólo eso, los grupos de aplicaciones son altamente configurables. Puede configurar el entorno de seguridad en el que se ejecutan los grupos estableciendo su nivel de suplantación de ejecución, lo que le permite personalizar los permisos otorgados a una aplicación web (nuevamente, con una granularidad muy fina). Una gran mejora para ASP.NET es que el grupo de aplicaciones anula la mayoría de las configuraciones en la sección ProcessModel en el archivo machine.config. Las configuraciones de esta sección son muy difíciles de administrar en IIS5 porque son globales y no se pueden anular en el archivo web.config de la aplicación. Cuando se ejecuta IIS6, la configuración relacionada con ProcessModel se ignora en su mayoría y, en su lugar, se lee desde el grupo de aplicaciones. Tenga en cuenta que la mayoría de ellos se mencionan aquí: algunas configuraciones, como el tamaño del grupo de subprocesos y la configuración del subproceso IO, todavía se leen desde machine.config porque no tienen elementos correspondientes en la configuración del grupo de subprocesos.
Debido a que los grupos de aplicaciones son ejecutables externos, estos ejecutables se pueden monitorear y administrar fácilmente. IIS6 proporciona una serie de opciones de verificación del estado del sistema, reinicios y tiempos de espera, que pueden usarse fácilmente para verificar e incluso corregir problemas del programa en muchos casos. Finalmente, el grupo de aplicaciones de IIS6 no depende de COM+ como el modo de aislamiento de IIS5. Esto puede mejorar el rendimiento y la estabilidad (especialmente para algunas aplicaciones internas que necesitan llamar a componentes COM).
Aunque los grupos de aplicaciones de IIS6 son EXE separados, son. están altamente optimizados para operaciones HTTP. Se comunican directamente con el controlador HTTP.SYS en modo kernel. Las solicitudes recibidas se enrutan directamente al grupo de aplicaciones adecuado. InetInfo es básicamente solo un hipervisor y un servidor de configuración; la mayor parte de la interacción en realidad ocurre directamente entre HTTP.SYS y el grupo de aplicaciones, todo lo cual hace de IIS6 un entorno más estable y eficiente que IIS5. Esto es especialmente cierto para el contenido estático y las aplicaciones ASP.NET.
Un grupo de aplicaciones IIS6 tiene una comprensión innata de ASP.NET. ASP.NET puede interactuar con él en la API subyacente. Esto permite el acceso directo a la API de almacenamiento en caché HTTP. Esto permite que el almacenamiento en caché a nivel de ASP.NET se entregue directamente al servidor web.
En IIS6, las extensiones ISAPI se ejecutan en el proceso de trabajo del grupo de aplicaciones. El tiempo de ejecución de .NET también se ejecuta en el mismo proceso, por lo que la comunicación entre la extensión ISAPI y el tiempo de ejecución de .NET se produce dentro del proceso. Esto tiene una ventaja de rendimiento natural en comparación con la canalización con nombre utilizada por IIS5. Aunque el modelo de alojamiento de IIS es muy diferente, la interfaz con el código administrado es sorprendentemente similar: sólo el proceso de enrutamiento de mensajes es ligeramente diferente.