Professional Documents
Culture Documents
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
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);
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.
Ahora si, vamos a programar las operaciones que hemos definido dentro de nuestro contrato. Empezaremos con 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);
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 {
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.
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
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.