You are on page 1of 8

Creando un proyecto WCF

Microsoft desde ya hace unos aos, viene trabajando con el concepto de Windows Communication Foundation (WCF). Voy a transcribir la definicin oficial de WCF que nos da Microsoft en su pgina web. Windows Communication Foundation (WCF) es un marco de trabajo para la creacin de aplicaciones orientadas a servicios. Con WCF, es posible enviar datos como mensajes asincrnicos de un extremo de servicio a otro. Un extremo de servicio puede formar parte de un servicio disponible continuamente hospedado por IIS, o puede ser un servicio hospedado en una aplicacin. Un extremo puede ser un cliente de un servicio que solicita datos de un extremo de servicio. Los mensajes pueden ser tan simples como un carcter o una palabra que se enva como XML, o tan complejos como una secuencia de datos binarios. A continuacin se indican unos cuantos escenarios de ejemplo:

Un servicio seguro para procesar transacciones comerciales. Un servicio que proporciona datos actualizados a otras personas, como un informe sobre trfico u otro servicio de supervisin. Un servicio de chat que permite a dos personas comunicarse o intercambiar datos en tiempo real. Una aplicacin de panel que sondea los datos de uno o varios servicios y los muestra en una presentacin lgica. Exponer un flujo de trabajo implementado utilizando Windows Workflow Foundation como un servicio WCF. Una aplicacin de Silverlight para sondear un servicio en busca de las fuentes de datos ms recientes.

Grficamente, veamos que podemos ganar implementando servicios WCF al momento de desarrollar nuestras aplicaciones.

Como podemos apreciar, WCF nos brinda un canal seguro de comunicacin (a travs de contratos) no solo entre aplicaciones de una misma mquina, sino a travs de una red que puede estar conformada por servidores Windows o Linux (Interoperabilidad). Bueno, basta de teora y veamos como crear un proyecto del tipo WCF en Visual Studio 2010 y utilizando las caractersticas que nos da el .Net Framework 4.0

Paso 1: Definir el Contrato


Cuando hablamos de servicios, recuerda que siempre debe de haber un proveedor y un consumidor del servicio, por lo que es necesario definir cmo se llevar la comunicacin entre estos dos entes. A este proceso le llamaremos: Definicin del Contrato. En el Contrato definiremos bsicamente lo siguiente:

Las operaciones que se podrn realizar. Las firmas y los tipos de datos que se enviarn y/o recibirn durante la invocacin de las operaciones. Los protocolos y formatos de serializacin que se utilizan para llevar a cabo la comunicacin.

Luego de definido esto, recin podemos llevarlo a la programacin. Para el ejemplo voy a definir algo bastante sencillo. Haremos un contrato para permitir la realizacin de las siguientes operaciones bsicas:

Factorial de un nmero
1 long Factorial(long x);

Devolver una Lista de enteros, con los "n" primeros nmeros de la serie de Fibonacci.
1 List<int> Numeros_Fibobacci(int n);

Suma de los primeros "n" nmeros de la serie de Fibonacci.


1 double Sumatoria_Fibonacci(int n);

Paso 2: Creando un Proyecto del Tipo WCF Service Library


Luego de definido las operaciones y el contrato, vamos a crear una aplicacin del tipo WCF Service Library, para implementarlos.

Luego de creada la aplicacin te pedira que borres los archivos IService1.cs y Service1.cs para que aprendamos a crear los servicios, sin necesidad de una ayuda. Luego de borrar ambos archivos, vamos a adicionar (Add New Item) a nuestro proyecto una Clase (llamado MiServicio) y una Interface (llamada IMiServicio). Te dejo la siguiente imagen para que veas a lo que me refiero.

Luego de creada la Clase y la Interface, debes de adicionar el siguiente using en ambas:


1 using System.ServiceModel;

Ahora si, vamos a programar las operaciones que hemos definido dentro de nuestro contrato. Empezaremos con la Interface.

Paso 3: Codificando la Interface

Luego de agregada la referencia, debemos de adicionar un atributo a nuestra interface, el atributo es [ServiceContract], quedando nuestro cdigo de la siguiente forma:
01 using System; 02 using System.Collections.Generic; 03 using System.Linq; 04 using System.Text; 05 using System.ServiceModel; 06 07 namespace WCFServiceLibrary 08 { 09 10 11 12 13 14 } } [ServiceContract] public interface IMiServicio {

Ahora codificaremos slo las firma de nuestra operaciones anteponiendo a cada una el atributo [OperationContract] , quedando nuestro cdigo de la siguiente forma:
01 using System; 02 using System.Collections.Generic; 03 using System.Linq; 04 using System.Text; 05 using System.ServiceModel; 06 07 namespace WCFServiceLibrary 08 { 09 10 11 12 13 14 15 16 17 18 19 20 21 22 } } [OperationContract] List<int> Numeros_Fibobacci(int n); [OperationContract] double Sumatoria_Fibonacci(int n); [ServiceContract] public interface IMiServicio { [OperationContract] long Factorial(long x);

Paso 4: Codificando la Clase

Terminada la Interface, debemos de implementar cada Operacin, esto lo hacemos en la clase, por lo que debemos de indicar, mediante un identificador, que la clase va a implementar los mtodos definidos en la Interface.
01 using System; 02 using System.Collections.Generic; 03 using System.Linq; 04 using System.Text; 05 using System.ServiceModel; 06 07 namespace WCFServiceLibrary 08 { 09 10 11 12 13 14 15 } } //Al momento de definir la clase, indicamos que implementar los //mtodos de la Interface IMiServicio public class MiServicio:IMiServicio {

Luego implementamos los mtodos que hemos definido.


01 using System; 02 using System.Collections.Generic; 03 using System.Linq; 04 using System.Text; 05 using System.ServiceModel; 06 07 namespace WCFServiceLibrary 08 { 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 public double Sumatoria_Fibonacci(int n) { List<int> numeros = Numeros_Fibobacci(n); } //Al momento de definir la clase, indicamos que implementar los //mtodos de la Interface IMiServicio public class MiServicio:IMiServicio { public long Factorial(long x) { if (x <= 1 ) return 1; else { return x*Factorial(x - 1); }

25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 } }

return numeros.Sum(); } public List<int> Numeros_Fibobacci(int n) { List<int> numeros = new List<int>(); int a, b, c; a = 1; b = 0; for (int i = 0; i < n;i++ ) { c = a + b; numeros.Add(c); a = b; b = c; } return numeros; }

Como puedes apreciar, la implementacin de las operaciones la he utilizado de forma normal, sin ningn operador o atributo diferente a los que ya conoces.

Paso 5: Cambiando el Archivo de Configuracin


Luego de definir el contrato, es necesario publicarlo para que pueda ser consumido, esto lo hacemos colocando el nombre del servicio, donde esta publicado, y el tipo de enlace que permitir. Voy a colocar parte del App.config para que veas que informacin se coloca por cada uno de los servicios:
01 <system.serviceModel> 02 <services> 03 04 05 06 07 <!-- Nombre del Servicio (Namespace.NombreClase) --> <service name="WCFServiceLibrary.MiServicio"> <host> <!-- Direccion del Servicio-->

<baseAddresses> <add baseAddress = 0 "http://localhost:8732/Design_Time_Addresses/WCFServiceLibrary/MiSer 8 vicio/" />

09 10 11

</baseAddresses> </host>

<!-- Service Endpoints --> <!-- Unless fully qualified, address is relative to base 12 address supplied above --> <endpoint address ="" binding="wsHttpBinding" contract="WCFServiceLibrary.IMiServicio"> 14 <!-13 Upon deployment, the following identity element should be removed or replaced to reflect the identity under which the deployed service runs. If 16 removed, WCF will infer an appropriate identity 15 17 18 19 20 21 22 23 automatically. --> <identity> <dns value="localhost"/> </identity> </endpoint>

<!-- Metadata Endpoints --> <!-- The Metadata Exchange endpoint is used by the service 24 to describe itself to clients. --> <!-- This endpoint does not use a secure binding and should be secured or removed before deployment --> <endpoint address="mex" binding="mexHttpBinding" 26 contract="IMetadataExchange"/> 25 27 28 </service> </services>

Luego de realizar los cambios podemos probar nuestros servicios, ejecutando nuestra aplicacin con F5

Paso 6: Probando nuestro Servicio WCF

Al ejecutar la aplicacin creada, Visal Studio, ejecuta WCF Test Client, aadiendo el servicio creado y las operaciones que este contempla, de forma que podremos probar si estas se ejecutan adecuadamente. Para probar cada operacin, basta con dar doble clic en una de ellas y en la pantalla que aparece, dar valores a los datos requeridos para luego invocarlos. Mira la siguiente imagen, donde pruebo la Funcin Factorial para un valor de x=5.

Como podrs ver, es bastante sencillo implementar un servicio WCF. Si bien es cierto he usado operaciones bastante sencillas, tu puedes utilizar lo aprendido aqu para trabajar con Base de Datos, por ejemplo, de forma que trabajes a travs de servicios que a su vez puedan ser aprovechadas por otras aplicaciones. Espero te sea de ayuda este post para tus trabajos posteriores.