sábado, 15 de diciembre de 2012

Depurando una Web app en Sharpdevelop

En aras de mantener la coherencia entre la forma de pensar y la de hacer las cosas, no cedí a la idea de instalar las herramientas que en otrora pudiera haber instalado para hacer un desarrollo con .Net sino que busqué la manera de hacerlo con software libre. Hay que aclarar que cuento con la licencia original de Windows professional que venía de fábrica con mi portátil, lo cual fue de gran utilidad.

Desde hace un tiempo vengo utilizando SharpDevelop para crear mis programas, principalmente de consola. Es un IDE muy útil y robusto, pero principalmente me gusta por estar en la onda libre y ser OpenSource. Sin embargo, hasta el día de hoy no había tenido la necesidad de utilizarlo en una aplicación Web con ASP.Net y ¡oh sorpresa!, no puedo depurar mis sitios directamente con ese IDE por falta de un servidor de aplicaciones Web. Así que tuve que empezar a buscar una solución, esperando no tener que eludir el problema, aunque su solución me tomara más tiempo del disponible.

Después de buscar un poco me encontré con una herramienta llamada UltiDevWeb (otrora Cassini) el cual es un servidor tanto para aplicaciones como sitios HTML estáticos, que entre sus principales características tiene el hecho de ser libre para su utilización y distribución y si bien no aparece como OpenSource su licencia no me limitaba para mis necesidades.

¡Listo! instalado el UltiDevWeb, configurado, creado el sitio y lo demás como lo indicaban en foros como éste y éste. Efectivamente el sitio quedaba publicado y visible desde el navegador, sin embargo no hubo forma de habilitar la depuración desde el SharpDevelop (#D) ya que siempre presenta un error al no reconocer el servidor. Así que por este lado es posible para poner disponible el sitio pero no lo es para la depuración desarrollando con el #D.

Segunda opción: IIS o IIS Express. Al revisar mi equipo, el cual vino con Windows, me encontré con que al ser una versión professional viene con la opción de habilitar el IIS7. Se habilita fácilmente desde el panel de control, en la opción de "Activar o desactivar las características de Windows". Luego de habilitarlo, en el proyecto de #D asocié el servidor IIS dirigiéndome a las opciones de servidor Web disponibles en las propiedades del proyecto (Ver Imagen 1).

Imagen 1: Habilitar IIS en SharpDevelop

Uno esperaría tener solamente que presionar F5 y poder depurar la aplicación, sin embargo, ocurrieron algunos errores que presento a continuación:

Primero: la aplicación no existía en IIS. Para solucionarlo se agrega el sitio en el administrador del IIS apuntando a la carpeta donde se encuentra el proyecto. En la Imagen 2 puede verse el sitio creado en el IIS, para mi caso se llama ccmapdf.

Imagen 2: Sitio creado en el IIS

Nota importante: Para que no se presente un error con la interpretación del ASP se requiere convertir el sitio en una aplicación. Para ello se da clic derecho sobre el nombre del proyecto (no el principal sino aquel que tiene el mismo nombre y se encuentra al interior del sitio creado) y allí se selecciona la opción "Agregar aplicación", esto abrirá una ventana a la cual se le da Aceptar y listo, se convierte el sitio en una aplicación. Al ser una aplicación se verá con un ícono como unas hojas con un mundo como el de la Imagen 2.


Segundo: El error "A 32 bit processes cannot access modules of a 64 bit process.". Ésta es fácil, se soluciona indicando en el IIS que la aplicación soporta 32 bit. En la Imagen 3 se ven los pasos para habilitar la aplicación a que se ejecute como de 32 bit, lo cual se hace en el grupo de aplicaciones donde se encuentra el proyecto.

Imagen 3: Habilitar aplicaciones en el IIS a 32-bit

Nota: en la misma ventana de propiedades se puede especificar la versión del framework a utilizar y otros valores interesantes.

Tercero: el error:
Error HTTP 500.21 - Internal Server Error
El controlador "PageHandlerFactory-Integrated" tiene una condición previa incorrecta "ManagedPipelineHandler" en su lista de módulos

Éste fue tremendo, resulta que no siempre queda instalado el interprete de ASP.Net. La solución es muy simple, basta con ingresar a la carpeta: c:\Windows\Microsoft.NET\Framework\v4.0.30319 utilizando la consola de comandos y ejecutar el comando:
aspnet_regiis.exe -i

Esta solución la encontré aquí.

Ahora sí, utilizando herramientas libres (y la versión de Windows professional :( ... por ahora) y sin instalar ningún paquete o programa pirata, estoy haciendo mis desarrollos de ASP.Net.

--------------------------------------------------------------------------------------------------------

Ver también:
Full web server (IIS 5.1, 7 & IIS Express) support in SharpDevelop
SharpDevelop Classic ASP.NET websites using IIS Express