Like This!

Hoy hice mi primera instalación de una aplicación ASP.NET que consume servicios WCF en IIS 7.0 . Empecé con un proyecto que tenemos en desarrollo y que queremos montar en nuestro servidor para que el cliente pueda ver los avances más rápidamente. Este proyecto usa Silverlight, WCF, ASP.NET y varios componentes de terceros, que en su momento impidieron la instalación.

Decidí entonces hacer un sitio de prueba que además implementa HTTPHandlers para procesar peticiones personalizadas. El sitio es una solución con un proyecto web y un proyecto de servicios WCF estándar. Estándar en cuanto a que lo cree y no lo toqué. Revise lo que hacía por defecto la clase y el contrato que implementaba y lo consumí desde el sitio web. este sitio será muy fácil de implementar por ustedes y me encargaré de ahorrarles uno o dos madrazos.

Una vez probado el sitio, que lo único que hace es llamar con dos botones a cada uno de los métodos del servicio y poner el resultado como texto en un textbox, lo publiqué en el IIS. Lo primero que publiqué fue el proyecto de servicios, luego el sitio.

Para publicar el sitio de servicios, VS2010 ofrece una opción en el menú de contexto del proyecto que dice publish, como si fuera un sitio web tradicional. No entendí absolutamente nada de lo que esa ventana de dialogo me pedía. En casi todas las páginas que visité recomendaban hacerlo muy a pedal. Ensayé la opción de generar un package para instalar la aplicación. Esto genera un archivo ZIP en la carpeta obj/Debug del proyecto. Luego en el IIS creamos una aplicación en el sitio web, con click derecho elegimos la opción deploy/Import Application del menú de contexto. En el asistente buscamos el archivo generado, en paso posterior indicamos la carpeta donde vamos a instalar el servicio y terminamos. Esta forma hace lo que todos los foros hacen a mano y lo que no hace el asistente que abrimos al tratar de publicar el servicio directamente desde VS2010.

Y aqui empezamos a sufrir. Varios errores raros pueden pasar y aunque no recuerdo bien todos, he de daros los que creo que son más comunes.

1. La carpeta donde estas publicando tu sitio y los servicios debe poderse acceder desde el IIS. Para esto basta con agregar al usuario IIS_IUSR en las configuraciones de seguridad de la carpeta. Esto es necesario si el error refiere a la imposibilidad de leer el archivo de configuración *.config.

2. Del application pool debemos verificar lo siguiente. Que la version del framework sea la que en verdad estamos usando. En mi caso es V4.0. Que si es el caso, soporte aplicaciones 32bits, y que maneje el pipeline como lo necesitamos. En este ejemplo, los servicios se publican con una AppPool con pipelines en modo manejado y el sitio con el pipeline en modo integrado.

3. El siguietne error es bueno. Es decir, había batallado mucho para hallar las configuraciones necesarias y el sitio ya corría pero me aparecia el siguiente error de servidor. Could Not Load Type ‘System.ServiceModel.Activation.HttpModule’.

Este error puede ocurrir, entre otros casos, cuando IIS se instala después del FrameWork 4.0, o si después de IIS y .NET 4.0 se ha isntaldo WCF Http Activation Module 3.0.

Confuso, pero fácil de resolver. debemos registrar en el IIS la versión del framework que estamos usando. para esto ejecutamos en linea de comandos lo siguiente:

aspnet_regiis.exe -iru

en la ubicación siguiente

  • 32-bit systems: %SystemRoot%\Microsoft.NET\Framework\v4.0.21006
  • 64-bit systems: %SystemRoot%\Microsoft.NET\Framework64\v4.0.21006

Si estan usando HTTPHandlers. deben adicionalmente configurar las opciones “ISAGI and CGI restrictions” del servidor IIS, desde el adminsitrador del IIS. Para llegar a ellas, se paran en el elemento raiz del árbol de su servidor y en el panel central aparecerá esta opción bajo el título IIS. La opción restriction del framework que están usando debe estar en allowed.

Su sitio ya debería correr, a menos que les salga algo adicional. Para esos casos, revisen el error que les arroja el servidor y consúlten Los Códigos de Estado HTTP de IIS 7.0. Ahí mismo encontrarán enlaces a páginas que me ayudaron a sintetizar mi experiencia de hoy publicando mi primer sitio ASP que consume servicios WCF.

Ahora espero poder publicar el proyecto grande, pero ahí los problemas serán diferentes porque usamos varios componentes de terceros y ellos nos están dando el soporte. Ya les contaré…