14 sept 2012

WCF 4 Parte 4: Instalando servicio en IIS

Cuarta entrega de mis notas sobre sobre el libro “Windows Communication Fundation 4”, una vez más recomendar su adquisición y lectura para su correcto aprovechamiento.

En el último post dejamos nuestro servicio con cuatro operaciones ejecutándose en el servidor de desarrollo de Visual Studio, además de una aplicación cliente que prueba las operaciones. En este nuevo post vamos a pasar nuestro servicio del servidor de desarrollo a un IIS (De hecho desde el punto de vista de un desarrollo normal este sería el siguiente paso lógico).

Primero necesitamos ejecutar Visual Studio con permisos de Administrador así que, le damos clic derecho a nuestro acceso directo de Visual Studio y en el menú emergente elegimos “Run as administrator”.


Una vez con Visual Studio abierto, escogemos la solución con la que hemos venido trabajando. Sobre el proyecto web que contiene nuestro servicio hacemos clic derecho y del menú emergente elegimos “Publish Web Site


Con esto nos aparecerá el cuadro de diálogo para la publicación del sitio, con este abierto hacemos clic en el botón de buscar la ubicación (el botón que contiene tres puntos).En la nueva pantalla que aparece elegimos “Local IIS” en el panel de la izquierda, “Default Web Site” en la lista de la derecha. Con esto seleccionado hacemos clic en icono el icono “Create New Web Application”, renombramos el nuevo sitio (yo lo llamé ProductoServicio) y hacemos clic en “Open”.


En la anterior pantalla anterior hacemos clic en OK. Y con esto hemos publicado nuestro servicio en el IIS. Para comprobar esto, vamos a la ruta C:\inetpub\wwwroot\ProductoServicio creada automaticamente por medio de los pasos anteriores.


Aquí podemos comprobar que nuestro sitio compilado (muy importante) ya se encuentra en el directorio correspondiente al IIS.  No vemos nuestros archivos de código porque el sitio se encuentra compilado.

Pero aun nos falta un detalle para que nuestro sitio este completamente capacitado para funcionar, estos asignarle el Application Pool correcto en el IIS, Para esto abrimos el IIS (para mi la forma mas rápida la combinación de teclar Windows y R, y luego escribir inetmgr y enter). Verificamos que exista un Application Pool con el .Net Framework 4.0 (si no existe, antes de crearlo, es prudunte registrar el framework primero, para esto usamos la ventana de comandos de Visual studio 2012 y introducimos la siguiente instrucción “aspnet_regiis.exe –i”, sin comillas), si no lo creamos:


Contando ya con un Application Pool adecuado nos ubicamos en nuestro sitio web y el panel de Actions Elegimos Basic Configuration, nos aparecerá una ventana de diálogo donde podemos cambiar el Application Pool.


¡Listo! Para comprobar que nuestro servicio se esta corriendo adecuadamente lo comprobamos introduciendo la ruta http://localhost/ProductoServicio/Service.svc en el browser, nos debe aparecer algo similar a esto.


Ahora bien tenemos nuestro servicio ejecutándose en el IIS, eso significa que demos configurar nuestra aplicación cliente para que lo acceda desde el IIS y no desde el servidor de desarrollo. Como no ha cambiando nada en la implementación ni en el contrato, todo se reduce a un cambio de configuración.
Nos ubicamos en visual studio en nuestro proyecto consola, abrimos el archivo App.config y dentro de éste ubicamos la sección del endpoint y cambiamos el address para que apunta a la dirección del IIS, quedando asi:
<endpoint address="http://localhost/ProductoServicio/Service.svc"
                binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IProductoServicio"
                contract="TestWCF.IProductoServicio" name="BasicHttpBinding_IProductoServicio" />
Ejecutamos nuestra aplicación. (si la aplicación no devuelve datos, es muy probable que se deba a que el Application Pool este usando un identity que no tiene permisos para acceder a la base de datos, usando Advance Settings y cambiando el Identity en la sección Process Model, por una cuenta que sea db_owner para la base de datos que estamos usando se debería resolver el problema)


Todo funciona exactamente igual que cuando nos conectamos al servidor de desarrollo, solo que ahora nos conectamos al IIS.

Esta forma de alojar el servicio en IIS es muy útil para establecer comunicaciones entre aplicaciones o servicios a través de internet, es prácticamente igual que desarrollar web services. Pero y si estas aplicaciones o servicios están dentro de nuestra organización ¿No habrá formas mas eficientes de establecer esta comunicación?

Efectivamente las hay, en el siguiente post ejemplificaremos un par de opciones.

Roy {aka. Foy}

Autor & Editor

Desarrallador y líder técnico, con experiencia en tecnologías Microsoft desde los tiempos del VB6 y el asp clásico hasta el .Net Core, pasando por COM+, javascript, angularjs, Ionic, xaml, cordova, MVC, Web Api, Sql Server, Oracle... . Ávido lector, apasionado programador.