1 de noviembre de 2009

WCF, Desarrollando un Servicio y Cliente ASP.Net

Veamos un ejemplo práctico, paso a paso, de como CONSTRUIR y CONSUMIR un servicio WCF en ASP.Net.

En el artículo anterior (WCF, Introducción y Conceptos Básicos) comentábamos sobre los pasos para desarrollar un servicio, en este artículo implementaremos cada uno de esos pasos:

  1. Definir el Contrato (ServiceContract)
  2. Implementar el Contrato (ServiceContract)
  3. Configurar el Servicio
  4. Diseñar una aplicación Hosting del servicio
  5. Diseñar una aplicación cliente del servicio

Antes de comenzar plantemos el ejemplo que queremos implementar:

Imaginemos que deseamos crear un servicio y un cliente web que lo consuma, y que dicho servicio nos de la posibilidad de:

  • Obtener todos los países de una tabla de datos.
  • Insertar un nuevo país.
  • Refrescar la lista de países.

 

WCF, Definir el Contrato

En este punto es donde definiremos la interfaz, agregando los distintos métodos que serán incluidos en el contrato.

Pero antes deberemos crear una solución y dentro agregaremos un proyecto que será nuestro servicio WCF.

WCF Crear Servicio, WCF Service

Como vemos en la figura anterior, el proyecto que agregaremos será una Biblioteca de Servicios WCF y la nombraremos WCFUtiles.

Lo próximo que haremos será agregar un Servicio WCF al proyecto:

WCF Crear Servicio, WCF Services En nuestro caso de ejemplo le llamaremos al servicio de WCFCodigosWS.svc”. Al aceptar se nos crearan automáticamente 3 archivos:

WCF Services Demo

 

En el archivo señalado es donde definiremos el contrato del servicio,  que no es otra cosa que definir la interfaz que deseamos:

WCF Services Ejemplo

Nótese como en la interfaz ICodigosWS hemos definido 3 métodos:

  • ObtenerPaises
  • AdicionarPais
  • RefrescarPaises

Estos métodos serán los que posteriormente implementaremos en la clase final del servicio.

Como algunos de estos métodos devuelve un tipo de datos List<CodigoWS>, necesitaremos definir el atributo ServiceKnownType. Dentro del esquema que viaja con el mensaje las colecciones viajan como array pero es preciso decirle de que tipo es ese array, para que el cliente pueda posteriormente deserializarlo; es por ello que definimos este atributo.

 

WCF, Definir o Implementar el Contrato

Para ello abriremos el segundo archivo CodigosWS.cs, donde definiremos el contrato, que no es otra cosa que definir una clase que implemente la interfaz creada anteriormente ICodigosWS.

WCF Services Ejemplo, Web Service ASP.NET

Como veras en la figura, se define una clase CodigosWS, que implementa la interfaz ICodigosWS. Y se implementan los 3 métodos definidos en la interfaz. Veamos la definición de uno de los métodos:

WCF Services Ejemplo

 

WCF, Configurar el Servicio

La configuración del servicio la hacemos en un fichero de configuración Web.Config.

WCF Servicio Configuracion

En esta imagen vemos una configuración muy básica, mas adelante en otro articulo profundizaré un poco más sobre las posibles configuraciones.

En el Web.Config, configuraremos 2 cosas:

El Servicio (<services>):

  • El nombre del servicio que coincidirá con el nombre de la clase.
  • El behaviorConfiguration que es definido más abajo en el mismo fichero.

Dentro del servicio debemos identificar un endpoint del mismo:

  • Definiremos el contrato del endpoint.
  • El tipo de binding.

El Comportamiento (<behaviors>):

  • Exponer el metadata para que los clientes puedan ver y consumir el servicio.

Llegados a este punto, podemos compilar el servicio y comprobar si todo ha ido bien, para ello abriremos el fichero CodigosWS.svc en el explorador, y debemos obtener una imagen como esta:

WCF Servicio Configuracion, Web Services ASP.Net

Esto nos indica que nuestro servicio ya esta creado y expuesto hacia el mundo con el metadata señalado.

 

WCF, Hosting del servicio

En este punto nada debemos hacer, porque en nuestro ejemplo hemos hosteado el servicio en el IIS (localhost).

 

WCF, Diseñar una aplicación cliente del servicio

Llegados aquí ya estamos listos para crear el cliente o consumidor del servicio.

Agregaremos a la solución un nuevo Sitio Web de Tipo ASP.NET, al que nombraremos ClienteWeb.

Lo primero que haremos en el proyecto será hacer referencia a nuestro servicio (Agregar Referencia de Servicio).

WCF Reference Services

Después crearemos una página que contendrá un grid con el resultado de nuestro servicio y un botón que será el encargado de ir al servicio y obtener la lista de países:

WCF Codigo ASPX

WCF C#

Después de creada e implementada la página pasaremos a compilar el proyecto para ver si todo esta bien. Posteriormente pondremos el proyecto y la página como elementos de inicio, y ejecutaremos para ver el resultado, lo cual debería ser algo como esto:

WCF Reference Services Ejemplo

Y hasta aquí este ejemplo práctico de como construir y consumir un servicio WCF en ASP.Net. Espero les halla servido como base. Más adelante escribiré otro artículo sobre los distintos comportamientos que podemos definirle a un servicio WCF.

hasta la próxima…

 

Artículos Relacionados:

27 comentarios:

  1. buenas. muy instructivo el tutorial y estoy muy agradecido por el me esta ayudando a comprender web services. queria preguntarle si cabria la posiblidad que suba el codigo completo para su mayor estudio. de antemano muchas gracias.

    ResponderEliminar
  2. Hola Eli:

    En estos momentos estoy de vacaciones fuera de casa, pero te prometo que en pocos días subo el código de ejemplo, o al menos te lo envío por mail.

    Un salu2 y gracias por leerme,
    Derbis

    ResponderEliminar
  3. buen aporte gracias...

    ResponderEliminar
  4. excelente!! podrias subir el codigo para, como dijeron, poder estudiarlo con mayor detalle ?
    muchas gracias

    ResponderEliminar
  5. Hola Miguel:

    Al final del artículo, he agregado un enlace para descargar la solución del ejemplo de WCF (Descargar Solución (VS 2008) WCF Servicio y Cliente ASP.NET C#). (Ojo: Es una solución para Visual Studio 2008, no se si funcionará correctamente en VS 2010)

    Aunque el ejemplo para descarga de WCF no es exactamente el mismo que el explicado en este tutorial sobre WCF, si tiene bastantes puntos de contactos, y es suficiente para que puedas comenzar a utilizar WCF.

    Un salu2 y suerte,
    Derbis

    ResponderEliminar
  6. bien o que parcero
    parce necesito exponer en mi universidad sobre WCF,segui los pasos de este tutorial, pero se me presentan errores

    sera que me puede enviar el codigo
    porfavor
    al correo cepeda_357@hotmail.com
    gracias

    ResponderEliminar
  7. Buenos Días Derbis
    Estoy implementando WebServices en una aplicación de Consulta y quiero implementar seguridad. Vi tu articulo relacionado a WCF y me pareció muy interesante ,
    Y tengo la duda de si me conviene cambiar mis WebServices a WCF para que sea más sencillo la seguridad?? O solamente implemento seguridad en los WebServices que estoy desarrollando???

    Gracias
    Samuel Chavez

    ResponderEliminar
  8. Quiero Agradecer este tutorial me funcionó a la perfección.

    ResponderEliminar
  9. Gracias por el tutorial. Me ha servido de mucha ayuda.

    ResponderEliminar
  10. oye .. una pregunta .. y si es conveniente que una pagina web consuma un servicio wcf en lugar de acceder directamente a la base de datos ,, ??? digo .. esto en caso de que el servicio sea de interraccion con una base de datos

    ResponderEliminar
  11. Sencillo, lo que necesitaba. Gracias!!

    ResponderEliminar
  12. Lástima que no se pueda descargar el ejemplo

    ResponderEliminar
  13. Hola, el ejemplo sí se puede descargar, yo lo acabo de hacer. Salu2

    ResponderEliminar
  14. Muy buen ejemplo! Gracias

    ResponderEliminar
  15. Hola, el servidor del código esta fallando... Me gustaría tener el codigo completo.
    Gracias.

    ResponderEliminar
  16. Hola, acabo de leer tu tutorial de
    " WCF, Desarrollando un Servicio y Cliente ASP.Net" mi consulta es es posible combinarlo con mysql?
    es decir un web service con mysql
    existe algun tutorial que lo necesito hacer y estoy muy atorado...

    ResponderEliminar
  17. Hola, Primero que nada esta bien el tutorial me ayudo mucho, sera que puedas volver a poner el enlace para descargar el ejemplo
    Gracias
    Saludos

    ResponderEliminar
  18. Hola, tu articulo esta muy interesante, podrias poner el detalle de cada metodo, porque al parecer ya no esta disponible para descargar el codigo. gracias

    ResponderEliminar
  19. Hola, por favor envíame el código por correo mi correo es analistdeveloper@gmail.com

    ResponderEliminar
  20. amigo como podria hacer esto en vb.net
    ?

    ResponderEliminar
  21. hola Derbis Corrales, me pasarias el codigo por correo xfa.

    evans.z.ero@hotmail.com

    ResponderEliminar
  22. Hola, muchas gracias por este gran ejemplo me ayudo mucho en lo que estoy trabajando actualmente, muchas gracias por darte tu tiempo de publicar estos ejemplo. Saludos.
    de igual manera podrías enviarme el código de este ejemplo por favor, y nuevamente gracias: correo: hdez.hdez.antonio@outlook.es

    ResponderEliminar
  23. Que tal Podrias mandarme el ejemplo por correo, esta genial la forma en que lo realizaas
    h_ibarguen@hotmail.com

    Gracias saludos

    ResponderEliminar
  24. Que tal Podrias mandarme el ejemplo por correo, esta genial la forma en que lo realizaas
    h_ibarguen@hotmail.com

    Gracias saludos

    ResponderEliminar
  25. Hola, muchas gracias por el tutorial, podrías mandarme el ejemplo a mi correo, ya que lo intente bajar y no pude... llopezaraujo@gmail.com

    ResponderEliminar