Aplicaciones ASP .NET en Windows XP Home

Desarrollar ASP .NET desde Visual Studio en sistemas con Windows XP Home, que carece de Internet Information Services

ASP .NET: introducción

Entre las diversas posibilidades que existen para desarrollar ASP .NET, la que lo hace más sencillo es usar el entorno de desarrollo integrado de Microsoft para la plataforma .NET, Visual Studio .NET (excelente ejemplo de entorno RAD – Rapid application development – Desarrollo rápido de aplicaciones).

De esta manera, dispones de todas las ventajas de este entorno:

  1. diseñadores integrados para cada uno de los lenguajes soportados.
  2. vistas complementarias de diseño y de código (creación de código desde la vista diseño).
  3. editores con sintaxis en colores y formato del código para aumentar su legibilidad.
  4. barras de herramientas y controles muy completas.
  5. autocompletado del código desactivando opciones inadecuadas (IntelliSense) y revisión de errores.
  6. motor de depuración y de ejecución con numerosas opciones.
  7. amplísima ayuda sobre el propio entorno, lenguajes de programación, clases de .NET Framework…

Al trabajar en una aplicación web, los archivos que aparecen en la carpeta de la aplicación difieren, dependiendo de si trabajas desde Visual Studio o fuera de él. Por ello, a la hora de compilar y colocar en el servidor una aplicación ASP .NET, hay que distinguir 2 situaciones diferentes:

  • Si trabajas dentro del entorno de desarrollo integrado de Visual Studio .NET, se generan una serie de archivos de los que, sobre todo, nos interesan: la página aspx de la carpeta raíz de la aplicación es el archivo hacia el que apuntar el navegador web, puede ser colocado en cualquier carpeta del servido web.
    • el archivo vb con código Visual Basic .NET, tiene el mismo nombre que el archivo aspx, añadiendo la extensión vb. Este archivo es necesario para modificar la aplicación pero puede no estar presente en el servidor web.
    • la librería dll de la carpeta bin de la aplicación es el archivo de código Visual Basic .NET compilado, debe ser colocado obligatoriamente en una carpeta bin que cuelgue directamente de la carpeta raíz del servidor web. La existencia de esta librería es la que hace innecesaria la presencia del archivo vb en el servidor, ya que la página aspx busca las variables, métodos, propiedades… en esta librería.
  • Si trabajas con un editor de texto: sólo hay que generar 2 archivos, aspx y vb, que pueden ser colocados en cualquier lugar del servidor web. No es obligatorio compilar el archivo vb. El navegador web apunta a la página aspx y en ella aparece una referencia a la localización del archivo vb.

Por ello, la directiva @Page de las páginas aspx es distinta en cada uno de los 2 casos. Si trabajas en el entorno RAD de Visual Studio .NET, se usan estos atributos en la directiva @Page:

  • Codebehind, que especifica el nombre del archivo compilado que contiene la clase asociada con la página. El diseñador de formularios Web Forms de Visual Studio .NET usa este atributo para averiguar dónde se encuentra la clase derivada de Page, de forma que pueda crear una instancia de la misma para que se pueda trabajar con ella en tiempo de diseño. Codebehind sólo se usa en tiempo de diseño, no se usa en tiempo de ejecución, ya se ha visto que el archivo vb como tal no es necesario, sólo la librería dll resultante de la compilación.
  • Inherits, que define la clase de la que hereda la página aspx. Esta clase será buscada en la librería correspondiente de la carpeta bin de la raíz del servidor Web, según el esquema nombre_de_la_dll.nombre_de_la_clase.

Así es como debe ser configurado mientras se trabaja con la página dentro de Visual Studio .NET (igualmente se puede mantener esta directiva en el servidor web, a condición de tener la librería dll en la carpeta bin de la raíz del servidor; es indiferente conservar o borrar el atributo Codebehind, ya se ha dicho que no se usa en tiempo de ejecución).

<%@ Page Language="vb" Codebehind="clases.aspx.vb" Inherits="ejercicio.clase1" %>

(aquí la página aspx utiliza el atributo Inherits para heredar la clase clase1 derivada de Page, descrita en el archivo clases.aspx.vb, que es precompilado en segundo plano para poder probar la página a medida que se va construyendo).

Si trabajas fuera del entorno RAD de Visual Studio .NET, se usan estos atributos en la directiva @Page:

  • Inherits, que define la clase que hereda la página aspx (puede ser cualquier clase derivada de la clase Page).
  • Src, que especifica el archivo de código fuente vb en el que se define la clase heredada (es compilado dinámicamente cuando se solicita la página aspx); este archivo puede estar situado en cualquier carpeta del servidor, sólo hay que especificarlo correctamente en la ruta del atributo Src.

Así es como debe ser configurado al colocar las páginas en el servidor web:

<% @Page Language="vb" Inherits="clase1" Src="clases.aspx.vb" %>

(aquí la página aspx hereda la clase clase1, descrita en el archivo clases.aspx.vb , que es compilado en tiempo de ejecución)

Pero Visual Studio .NET solamente permite el desarrollo de aplicaciones web ASP .NET si está instalado Internet Information Services (IIS en adelante), al que utiliza para probar la aplicación cuando se pulsa Ejecutar.
Por defecto, Windows XP Home no permite la instalación de componentes de IIS entre los que se cuentan un servidor web, un servidor ftp, etc. Solamente Windows XP Profesional tiene esa capacidad dentro de la familia XP.
Pero, en ocasiones, un poseedor de Windows XP Home quiere desarrollar aplicaciones web ASP .NET. En tales casos, éstas son las opciones:

  1. adquirir Windows XP Profesional para substituir a Windows XP Home: solución cara, sobre todo si se trata de un programador aficionado que está aprendiendo sin finalidad comercial (Windows XP Profesional cuesta el doble que Windows XP Home).
  2. desarrollar ASP .NET sin usar Visual Studio .NET: perfectamente válido, pero se pierden las enormes ventajas que, para el programador novato, tiene este entorno.
  3. instalar IIS de Windows 2000 Profesional en Windows XP Home para poder usar Visual Studio .NET.

En realidad, para programar en ASP .NET sólo hace falta un editor de texto y compilar las aplicaciones desde línea de comandos recurriendo a cualquier otro servidor web distinto de IIS. Por ejemplo, UltiDev Cassini Web Server for ASP.NET Applications, servidor web ligero, gratuito y redistribuible que soporta ASP .NET 1.1. 2, 3 y 3.5.

¿Es posible instalar IIS en Windows XP Home?

La necesidad de instalar y usar IIS surge al comenzar a escribir proyectos web (ASP .NET) desde Visual Studio .NET y encontrar la necesidad de tener IIS instalado en el sistema (no basta con tener «cualquier otro» servidor web, por ejemplo Apache, Cassini…, ha de ser IIS de Microsoft). Buscando por Internet se encuentra ayuda muy útil sobre este asunto. Aunque «oficialmente» la instalación de IIS en Windows XP Home no está soportada, sí es posible realizarla. El método propuesto en los sitios consultados es básicamente el mismo, y se comenta más abajo.

Como Windows XP Home trata la seguridad de carpetas y archivos de manera diferente a Windows XP Profesional, suelen surgir problemas, una vez instalado IIS, con los permisos requeridos para mostrar la página de inicio o con los permisos de modificación (escritura) de los archivos del sitio web local; también se comenta la forma de solucionar estos inconvenientes.

NOTA LEGAL: las modificaciones propuestas en los apartados siguientes pueden dar lugar a la invalidación del Contrato de Licencia para el Usuario Final (CLUF) de Microsoft Windows XP Home. El CLUF o EULA (End-User License Agreement – Acuerdo de Licencia para el Usuario Final) es el tipo de licencia usada en la mayoría del software comercial, incluidos los sistemas operativos de Microsoft. El EULA o CLUF es el contrato legal entre el fabricante o autor y el usuario final de una aplicación de software. El EULA o CLUF detalla cómo puede y no puede ser usado el software y las restricciones que impone el fabricante o autor del software.
El uso de una parte del sistema operativo Windows 2000 en un sistema con Windows XP Home puede incumplir algunas de esas restricciones, al tratarse de un uso no autorizado expresamente por Microsoft.

NOTA TÉCNICA: no siempre es posible hacer funcionar correctamente IIS en Windows XP Home, y una instalación de IIS que funciona bien en Windows XP Home puede estropearse despues de instalar el Service Pack 2 de Windows XP. Has de tener en cuenta que todo lo que se explica en este tutorial es infinitamente más sencillo y con todas las garantías de buen funcionamiento en Windows 2000 Profesional o en Windows XP Profesional y, por supuesto, en la familia de servidores (Windows 2000 Server o Windows 2003 Server).

Instalar IIS de Windows 2000 en Windows XP Home

  1. Abre con un editor de texto el archivo C:WINDOWS\INF\SYSOC.INF (haz copia del anterior por si acaso)
  2. Busca en el apartado [COMPONENTS] la línea: iis=iis.dll,OcEntry,iis.inf,hide,7
  3. Cambia el texto a  iis=iis2.dll,OcEntry,iis2.inf,,7
  4. Extrae del CD de Windows 2000 (sirve igual Profesional que Server) los archivos IIS.DL_ y IIS.IN_ (carpeta i386) copiándolos con el nombre IIS2.DLL y IIS2.INF a una carpeta del disco duro y ejecutando el comando
    EXPAND IIS.DL_ IIS2.DLL
    EXPAND IIS.IN_ IIS2.INF
  5. Copia IIS2.DLL a C:\WINDOWS\SYSTEM32\SETUP
  6. Copia IIS2.INF a C:\WINDOW\SINF
  7. Ve a Agregar y quitar programas / Componentes de windows y elige el componente de IIS (marca sólo la casilla del servidor web y el programa selecciona las otras casillas que necesita automáticamente)
  8. Aquí es donde pide el CD de Windows 2000 mientras copia archivos. El programa de instalación puede solicitar algún archivo suelto del paquete IMS.CAB, que está en la carpeta i386 del CD de Windows XP o en la carpeta i386 del CD de Windows 2000 (por ejemplo, a veces solicita el archivo EXCH_adsiisex.dll de alguno de esos paquetes) pero lo más probable es que sólo busque archivos en el CD de Windows 2000 sin preguntar por alguno en concreto
  9. Al finalizar, si vas a botón derecho sobre Mi PC / Administrar / Servicios y aplicaciones / Servicios de Internet Information Server aparece una entrada nueva para el IIS, desde ahí detienes o arrancas el servicio y configuras las opciones del servidor (directorio que contendrá el sitio web, cuenta de usuario que realiza el acceso anónimo, permisos a directorios, nombre de la página inicial, etc..
  10. Por defecto, la carpeta raíz del servidor web está en C:\Inetpub\wwwroot, ahí es donde vas creando el sitio web local pero puedes modificar esto desde la herramienta de administración del servicio
  11. Para probar si todo está bien, dirige tu navegador a la dirección web de la máquina local, puede ser localhost o 127.0.0.1

Recuerda que, si usas cortafuegos o estás detrás de un router en modo multipuesto, has de abrir el puerto 80 (servidor web) si deseas que el servicio funcione adecuadamente.

Instalar IIS después de Visual Studio .NET

Si instalas IIS después de haber instalado Visual Studio .NET (cosa bastante habitual en usuarios de Windows XP Home, que suelen probar a desarrollar ASP .NET cuando ya tienen instalado Visual Studio .NET), aparece un error al crear un nuevo proyecto web en Visual Studio .NET del tipo «no existe o no funciona el servicio ASP .NET…» (o algún texto similar). Para solucionarlo, has de ejecutar desde una ventana de comandos:

C:\WINDOWS\Microsoft.NETFrameworkvx.x.xxxx\aspnet_regiis.exe /i 

y además

regsvr32 "%windir%Microsoft.NETFrameworkvx.x.xxxx\aspnet_isapi.dll"

(donde vx.x.xxxx, substituyendo las x por números, equivale a la versión de .NET Framework instalada)

Con esa orden se reinstala y reinicia el servidor ASP .NET (este comando instala la versión de ASP .NET asociada a la herramienta aspnet_regiis.exe y actualiza las asignaciones de secuencias de comandos de todas las aplicaciones ASP .NET existentes. Ten en cuenta que sólo se ven afectadas las aplicaciones que, en la actualidad, tienen una versión anterior de ASP .NET asignada y debería permitir la creación de proyectos web en Visual Studio .NET. También se realiza el registro correcto del fichero que se encarga de los filtros ISAPI.

Esto sólo es necesario si has instalado IIS cuando ya tienes instalado Visual Studio .NET en tu PC.

Problemas con permisos al acceder al servidor web local

Suelen solucionarse usando la cuenta de usuario que inicia sesión en Windows para el acceso anónimo al servidor web local. Si al intentar abrir el sitio web predeterminado recibes mensajes de error de Acceso no permitido o Permisos insuficientes, puede ser útil cambiar la cuenta del sistema que se usará para el acceso como usuario anónimo; esta cuenta por defecto es IUSR_XXX (donde XXX es el nombre de la máquina local) pero puede ser substituida por el usuario que ha iniciado sesión en Windows con la salvedad de que este usuario ha de tener contraseña (no puede ser cuenta sin contraseña).

Para ello, vas al Administrador del servicio IIS (botón derecho en Mi PC / Administrar / Servicios y aplicaciones / Servicios de Internet Information Server) y allí:

  1. Botón derecho en Sitio Web Predeterminado / Propiedades / Seguridad de Directorios / Control de autentificación y Acceso anónimo / Modificar
  2. Métodos de autentificación / Acceso anónimo / Modificar
  3. Cuenta de usuario anónimo: si no estás seguro de cómo escribir tu nombre de usuario, das al botón Examinar y después a Avanzadas / Buscar ahora, donde aparecen los usuarios del sistema.
  4. Das doble clic al usuario que inicia sesión en Windows y te vas saliendo de los cuadros de diálogo, en uno de ellos te hace confirmar la contraseña y en otro te puede mostrar nodos de IIS (carpetas, impresoras…) a los que aplicar la configuración de seguridad recién cambiada, los seleccionas a todos y aceptas (recuerda dejar seleccionada la casilla de Autentificación de Windows integrada pues, de no ser así, la página local de inicio no será accesible o no será posible crear nuevos proyectos web desde Visual Studio)
  5. Detener y reiniciar el servicio de IIS.

Aviso de seguridad: La configuración propuesta solamente debe emplearse en el servidor web local para probar las páginas en nuestro propio PC, nunca en servidores web abiertos a Internet por el peligro que entraña permitir a usuarios externos acceder como anónimos empleando nuestra propia cuenta del sistema que, por lo general, es del grupo Administradores. Por otro lado, un servidor web accesible desde Internet no debería nunca tener instalado Windows XP Home.

Errores de IIS depués de actualizar Windows XP Home al Service Pack 2 o 3 (SP2/SP3)

Puede dar resultado:

  1. Recuperar los archivos IIS.INF / IIS.DLL desde Windows 2000 con SP4 integrado
  2. Utilizar la herramienta que comprueba los archivos protegidos de sistema (SFC)

Después de aplicar SP2/SP3 a Windows XP Home, algunas instalaciones de IIS dejan de funcionar. Una posible solución a este problema puede ser:

  1. Desinstalar IIS desde Agregar y quitar componentes de Windows (pueden aparecer mensajes de error durante la desinstalación).
  2. Extraer desde un CD de Windows 2000 con el Service Pack 4 ya integrado los 2 archivos nombrados aquí, al comienzo de este tutorial, sobreescribiendo los que ya tienes en tu sistema. Se trata de los archivos IIS.DL_ e IIS.IN_ de la carpeta /i386 del CD de Windows 2000.
  3. Volver a instalar IIS desde Agregar y quitar componentes de Windows.
  4. Repasar las instrucciones de los puntos anteriores relacionadas con permisos y escritura de carpetas.

También puede ser útil usar la herramienta SFC (System File Checker – Comprobador de archivos de sistema) que busca archivos de sistema protegidos y reemplaza las versiones incorrectas por las correctas, extrayéndolas del CD de Windows XP Home si es necesario:

  1. Es necesario disponer del CD de Windows XP Home
  2. Abrir una ventana de comandos (Inicio / Ejecutar / Cmd)
  3. teclear sfc /purgecache + intro (vacía la caché de archivos de sistema protegidos)
  4. teclear sfc /scannow + intro (busca archivos de sistema protegidos comprobando si la versión es correcta y reemplazando las versiones incorrectas por las correctas)
  5. si SFC solicita el CD de Windows XP Home a pesar de tenerlo ya introducido en su alojamiento, puede ser debido a que la ruta a la unidad del CD almacenada en el registro no sea la correcta o a que no esté bien definido el directorio en que SFC guarda la copia en caché de los archivos protegidos. La solución a estos problemas es:
  6. editar la clave del registro
    [HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionSetup]
    y modificar (o crear si no existe) un valor alfanumérico (REG_SZ) de nombre SourcePath, asignándole la ruta correcta (ejemplo: «E:»)
  7. editar la clave del registro
    [HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWinlogon]
    y modificar (o crear si no existe) un valor de cadena expandida (REG_EXPAND_SZ) de nombre SFCDllCacheDir, asignándole el nombre Qualified Directory

En ambos casos hay que reiniciar Windows para que los cambios surtan efecto.

AVISOlas instrucciones y propuestas de esta página se proporcionan sin garantía de ningún tipo a la hora de llevarlas a la práctica. Lo que ha funcionado bien en mi caso pudiera no hacerlo en el tuyo.