Si
nos basamos literalmente en conceptos encontrados en enlaces como éste en el
internet, podríamos mencionar que Servicios Windows Communication Foundation es:
un marco de trabajo para la creación de aplicaciones orientadas a servicios,
con los cuales es posible enviar datos como mensajes asincrónicos de un extremo
de servicio a otro.
Pero para poder hacer éste concepto un poco más
claro, podemos mencionar que los Servicios WCF son aplicaciones alojadas dentro
de otras aplicaciones, en un servidor o en el IIS de nuestro ordenador, que nos
permite enviar y recibir información entre dos puntos.
Por mencionar
algunas de las ventajas de trabajar con Servicios WCF tenemos:
Seguridad:
Es posible cifrar los mensajes para proteger la privacidad, así como
obligar a los usuarios a que se autentiquen antes de permitirles recibir
mensajes.
Contratos De Datos: Dado que WCF se basa en .NET Framework, también incluye métodos con código sencillo para proporcionar los contratos que desea aplicar. Uno de los tipos de contrato universales es el contrato de datos.
Interoperabilidad: WCF implementa estándares modernos de la industria para la interoperabilidad de servicios web, por lo que se nos hace más fácil integrarnos con tecnologías tales como: Windows Workflow Foundation (WF), Microsoft BizTalk Server R2, Microsoft Silverlight, entre otras.
Contratos De Datos: Dado que WCF se basa en .NET Framework, también incluye métodos con código sencillo para proporcionar los contratos que desea aplicar. Uno de los tipos de contrato universales es el contrato de datos.
Interoperabilidad: WCF implementa estándares modernos de la industria para la interoperabilidad de servicios web, por lo que se nos hace más fácil integrarnos con tecnologías tales como: Windows Workflow Foundation (WF), Microsoft BizTalk Server R2, Microsoft Silverlight, entre otras.
En
resumen, WCF se ha diseñado para ofrecer un enfoque manejable para la creación
de servicios web y clientes de servicios web.
Para poder comprender un poco
mejor todo lo anterior procedemos a crear nuestra aplicación para ultimar
detalles.
Primero, abrimos Visual Studio para crear un nuevo proyecto. Recordando que debemos de estar en la pestaña Visual C#.
Luego, buscamos la etiqueta WCF, y crearemos un proyecto de tipo WCF Service Library, al cual le pondremos de nombre ESFE.PruebaDeServicios.ServicioWCF.
Cuando demos click en botón Ok, el proyecto lucirá mas o menos de la siguiente manera:
En esta captura de pantalla podemos observar, lo que se conoce como una Interfaz. Una interfaz en términos simples la podemos definir como un contrato que contiene operaciones específicas las cuales debemos de implementar. Las interfaces son de la misma extensión que una clase común, es decir también son archivos “.cs” dentro de nuestro proyecto. Entonces ¿Cómo identificarlas? Sencillo, las interfaces se reconoces porque tienes una “I” en mayúscula antes de cualquier nombre. Recién creado el proyecto la interfaz se llamará IService1.cs.
En nuestra interface encontramos dentro del recuadro la parte exacta en dónde nosotros debemos de colocar nuestras operaciones del contrato, que más adelante como ya lo hemos mencionado, simplemente las implementaremos.
Para que una operación pueda ser implementada, deberemos anteponer el atributo entre corchetes [OperationContract], la cual nos indicará cuáles serás las operaciones que contendrá nuestra interfaz. Éste atributo se encuentra alojado dentro del namespace System.Runtime.Serialization, y deberá ser utilizado de acuerdo al número de operaciones que vayamos a utilizar. Es decir que si tenemos 3 operaciones, será necesario anteponer el [OperationContract] antes de cada una de ellas.
A la hora de implementar una interfaz, en la clase se crean unos métodos de tipo público.
En la imagen podemos observar la implementación de la interfaz, con el Método GetData, que recibe como parámetro un entero y nos devuelve un string.
Observamos la vista previa de los cambios...
A la hora de implementar una interfaz, en la clase se crean unos métodos de tipo público.
En la imagen podemos observar la implementación de la interfaz, con el Método GetData, que recibe como parámetro un entero y nos devuelve un string.
Ahora, procedemos a borrar todas las operaciones e implementaciones que trae nuestro servicio por defecto, ya que comenzaremos a crear nuestras propias operaciones. La interface junto con la clase deberán de lucir más o menos de la siguiente manera:
La Interfaz:
La Clase:
Como podemos observar, no tenemos ninguna operación en la interface, por lo que no tenemos nada que implementar en la clase.
Ahora procedemos a cambiarle nombre a la interfaz y a clase, dando click derecho sobre el nombre actual de la interfaz, opción Refactor, Rename para que nos aparezca el cuadro como el de la imagen anterior.
La interfaz tendrá el nombre IMiServicioWCF.
Observamos la vista previa de los cambios...
Luego continuamos con la clase, repetimos exactamente el mismo proceso para renombrar la interfaz, la diferencia que el nombre de la clase será sin la "I" MiServicioWCF.
Ahora podemos crear nuestra primera operación dentro de nuestro servicio, recordando que cada operación que vayamos a realizar debe de estar acompañana del atributo [OperationContract].
Cuando compilamos el proyecto nos dará este error:
Entonces lo que falta por hacer es implementar la interfaz. ¿Cómo lo hago? Sólo con un sencillo paso.
Si nos dirigimos hacia la clase, podemos observar que la clase hereda de la interface, por que solamente es necesario colocarse sobre el nombre de la interface, por ahi nos aparecerá un guión de color azul, el cual si nos colocamos sobre él nos dará dos opciones de las cuales utilizaremos la primera: Implement Interface 'IMiServicioWCF'.
Al implementar la interface, lo que sucederá es que se creará un método público, en donde especificaremos lo que queremos realizar.
Para el caso, lo que estamos creando es un servicio que sume dos números enteros, solo tenemos que crear las instrucciones para que la suma se lleve a cabo:
Ahora al compilar nuestro proyecto de Servicios, no nos dará ningún error porque ahora si ya tenemos implementada nuestra interface.
Al ejecutar el proyecto lo primero que pasará es que el servicio será "hosteado" en un servidor local para su ejecución.
Cuando nuestro servicio está listo para ser invocado, nos aparecerá una pantalla, la cual paso a explicar algunos detalles:
En el recuadro de color rojo observamos la dirección en donde está alojado nuestro servicio, la cual es única y le conocemos como Metadata. Dentro de la metadata podemos ver que aparece por ahí nuestra interface del proyecto de servicios que hemos creado a lo largo del post, la cual contiene el servicio de SumaDeEnteros.
En el recuadro de color negro podemos observar los parámetros que el usuario necesita introducir para realizar la suma, para el caso necesitamos de dos números que sean tipo entero.
Luego para efectuar la llamada al servicio, simplemente tenemos que pulsar en el botón Invoke, el cual está remarcado dentro del cuadro azul, para en la parte que por el momento está en blanco podamos observar los resultados de la suma.
Al hacer la llamada al servicio después de haber ingresado los parámetros necesarios, el resultado será el siguiente:















Hola Jesus, muy bueno tu aporte, prodria utilizar este tipo de proyecto de wcf para crear un servicio que me registre usuarios, cuyos parametros a guardar en base de datos sos id, nombre, apellido, ect? de que forma debo hacerlo?
ResponderEliminargracias!
Hola Diego. Gracias por leer el post. Dejame contarte que si es posible almacenar usuarios con los parámetros que mencionas. La forma de hacerlo dependerá de el tipo de Base de datos que utilices, y la cantidad de parámetros que sean necesarios. Pero de una manera general: Puedes crear un método primero en la interfaz que te permita recibir como parámetro un Usuario (y para eso debes de haber declarado una clase con las propiedades que necesites: Id, Nombre, Apellido, etc.), para después implementarlo en la clase del servicio, y luego en la implementación de la interfaz deberás igualar las propiedades de la clase a las del parámetro que esperas recibir en el método.
Eliminardeberia utilizar metodos post?
ResponderEliminar