Moviendo Aplicaciones Web ASP.NET 2.0 a IIS 7.0?
A ver veamos, nosotros tenemos dos modos de correr una Aplicación Web en IIS 7.0, en modo clásico o en modo integrado, y esto lo configuramos a nivel de un Application Pool.
El modo clásico, es como conocemos al trabajo de ASP.NET con IIS 6.0, el modo integrado es nuevo modelo de trabajo de IIS 7.0, que entre una de las features, me van permitir extender mi servidor, y usar funcionalidades propias que sólo tenia en ASP.NET, con otros lenguajes como Php, ASP clásico, o en páginas estáticas. Revisar el siguiente enlace para mayores detalles: ASP.NET Integration with IIS7.
Ahora, estoy moviendo una Aplicación Web ASP.NET que funciona de lujo en IIS 6.0, a trabajar con IIS 7.0, ¿qué recomendaciones debemos tener?
Primero, si estamos presionados y debemos hacer el cambio de aplicaciones Web a IIS 7.0, para ayer, la opción altamente recomendable es usar el modo clásico (configurar el Application pool). Tenemos que tener permiso para administrar el servidor, nos vamos a Application Pools, y verificamos que por lo menos uno de ellos o creamos uno nuevo, tenga la propiedad Managed Pipeline Mode, en Classic. Con esta configuración si nuestra aplicación Web funcionaba bien en un servidor IIS 6.0, debería funcionar bien en un servidor IIS 7.0.

¿Qué pasa si a nivel de un Web Site, solo tengo un Application Pool?, y para no perjudicar a otras aplicaciones Web, debo mantener el modo integrado, que será para todas las Aplicaciones Web dentro del Web Site. Hay algunos cambios que debemos hacer, si estamos usando determinas features.
Por ejemplo si estamos usando modules o handlers, que están agregados en el web.config, al ejecutar la aplicación Web, obtendremos el siguiente error: HTTP Error 500.22 - Internal Server Error, "An ASP.NET setting has been detected that does not apply in Integrated managed pipeline mode".
Y el problema es que en el modo integrado, los modules y handlres, deben ser colocados dentro de las secciones <modules>, y <handlres>, de la sección <system.webServer>. Este último nos permite hacer configuraciones a nivel de IIS, y llevárnosla en la aplicación dentro del web.config, y no tener que replicarlas en un nuevo servidor.
La solución para este escenario es sencilla, podemos usar el siguiente comando, AppCmd.Exe, que hará la migración de las secciones en el web.config:
> %windir%\system32\inetsrv\Appcmd migrate config "<ApplicationPath>"
Donde:
- "<ApplicationPath>" = "Default Web Site/" o
- "<ApplicationPath>" = "Default Web Site/WebApplication/"
Si todo salió bien, nos deberá salir un mensaje: Successfully migrate section "system.web./httpModules" | "system.web/httpHandlers".
Para mayores detalles sobre los cambios o features, en las cuales debemos tener cuidado, revisar: ASP.NET 2.0 Breaking Changes on IIS 7.0.
Atención, si la migración al modo Integrado les esta dando mucha lata y necesitan la Aplicación Web, lo mejor será usar el modo clásico. Lo ideal debe ser probarlo localmente (no producción), si todas las features de nuestra Aplicación funcionan correctamente en el modo integrado, antes de subirla a producción.
Saludos,