Como hacer que convivan ASP.NET 1.1 y ASP.NET 2.0 en una versión de 64 bits de Windows

Esto es un poco viejo, pero como me ha tocado hoy y para que no se me olvide, lo pongo aquí.

Como hacer que convivan ASP.NET 1.1 y ASP.NET 2.0 en una versión de 64 bits de Windows

Es posible hacer que convivan aplicaciones web de distintas versiones de Framework en un mismo servidor, solo hay que indicarle a través de la solapa ASP.NET de la aplicación web que versión de framework debe utilizar.

Pero en el caso de que esto se produzca en un servidor de 64 bits de Windows, no importa todo lo que uno pueda hacer, esta solapa jamás aparece por lo que no hay manera de definir que framework debe utilizar cada aplicación.

Entonces como se soluciona esto…

Supongamos que necesitamos que en nuestro servidor necesitamos tener algunas aplicaciones web que utilicen la versión ASP.NET 1.1 (v1.1.4322) y otras la versión ASP.NET 2.0 (v2.0.50727)

Para eso descargamos los paquetes redistribuibles siguientes:

• El paquete redistribuible .NET Framework versión 1.1

(NET-Framework-1.1)

• El paquete redistribuible x64 (64 bits) de .NET Framework versión 2.0

(NET-Framework-2.0) (*)

(*) El paquete redistribuible x64 (64 bits) de .NET Framework versión 2.0 contiene los entornos de tiempo de ejecución de 64 bits y 32 bits

1. Instale ambos paquetes redistribuibles

2. Haga clic en Inicio y en Ejecutar, escriba cmd y haga clic en Aceptar.

3. Escriba el comando siguiente para habilitar el modo de 32 bits:

cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1

4. Escriba el comando siguiente para registrar la versión de ASP.NET 1.1 y registrar las asignaciones de secuencias de comandos en la raíz de IIS y por debajo de esta:

%SYSTEMROOT%\Microsoft.NET\Framework\v1.1.4322\aspnet_regiis.exe -i

5. Escriba el comando siguiente para registrar la versión de ASP.NET 2.0 SIN registrar las asignaciones de secuencias de comandos en la raíz de IIS ni por debajo de esta:

%SYSTEMROOT%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -ir (**)

(**) Si utilizáramos la opción -i registraría la versión 2.0 y actualizaría las asignaciones de secuencia de comandos en la raíz y por debajo de esta a la versión 2.0

6. Asegúrese de que el estado de ASP.NET versión 1.1.4322 y ASP.NET v2.0.50727 (32-bit) es Permitido en la lista Extensión de servicio Web en el Administrador de Servicios de Internet Information Server

En estas condiciones si bien tenemos 2 versiones de framework registradas, todos los sitios web definidos hasta el momento utilizan la versión 1.1

 Si ejecutamos %SYSTEMROOT%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -lv podemos ver las versiones de framework registradas con indicación de cuál es la definida en ROOT

 Si ejecutamos %SYSTEMROOT%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -lk podemos ver todas las claves de metabases de IIS para las que ASP.NET tiene mapas de secuencias de comandos, así como la versión.

Para indicarle a IIS que un sitio web en particular va a utilizar la versión 2.0 lo hacemos ejecutando aspnet_regiis.exe de la versión 2.0 indicando que dicho registro será efectivo solo para esa aplicación en particular

%SYSTEMROOT%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -s W3SVC/1/ROOT/WebApp1 (***)

(***) W3SVC/1/ROOT/WebApp1 es la ruta de acceso de la aplicación en cuestión

Luego de esto si queremos correr esta aplicación que corre bajo la versión 2.0 nos vamos a encontrar con el mensaje

Server Application Unavailable

¿Por qué sucede esto?

Resulta que el IIS 6 permite una característica llamada Application Pool.

Esta permite aislar los procesos en los que corren nuestras aplicaciones, de manera que si ocurre un error con alguno, no afecta a los demás que no corran en el mismo application pool.

Como dijimos anteriormente IIS permite que varias versiones del framework vivan y se ejecuten felices en el mismo servidor, pero no en el mismo proceso (es decir, en el mismo application pool).

Por lo que debemos crear un nuevo application pool en el servidor para cada framework e indicarle a cada aplicación que application pool utilizar

Referencia:

http://support.microsoft.com/kb/894435

Espero que os resulte de utilidad.