Home :: Otros :: Productividad :: Creando un proyecto WCF
 
WCF

Creando un proyecto WCF

jul 20, 2010 en Productividad por Victor Parasi

En el artículo de SOA, vimos que en la actualidad lo importante no es sólo que tu aplicación funcione bien, sino que funcione acoplada al entorno sobre el cual será puesto en producción,comunicándose con las aplicaciones existentes y futuras mediante un concepto llamado Servicios. En este artículo veremos como implementar un Servicio mediante WCF de Microsoft.

FacebookGoogle BookmarksGoogle GmailTwitterYahoo MailHotmailLinkedInShare

En el post anterior, explique rápidamente que era la arquitectura SOA. En este post veremos que alternativa tenemos para cumplir con lo que nos indica esta arquitectura.

Microsoft desde ya hace unos años, viene trabajando con el concepto de  Windows Communication Foundation (WCF).  Voy a transcribir la definición oficial de WCF que nos da Microsoft en su página web.

Windows Communication Foundation (WCF) es un marco de trabajo para la creación de aplicaciones orientadas a servicios. Con WCF, es posible enviar datos como mensajes asincrónicos 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 aplicación. 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 carácter o una palabra que se envía como XML, o tan complejos como una secuencia de datos binarios. A continuación 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 tráfico u otro servicio de supervisión.
  • Un servicio de chat que permite a dos personas comunicarse o intercambiar datos en tiempo real.
  • Una aplicación de panel que sondea los datos de uno o varios servicios y los muestra en una presentación lógica.
  • Exponer un flujo de trabajo implementado utilizando Windows Workflow Foundation como un servicio WCF.
  • Una aplicación de Silverlight para sondear un servicio en busca de las fuentes de datos más recientes.

Gráficamente, veamos que podemos ganar implementando servicios WCF al momento de desarrollar nuestras aplicaciones.

Como podemos apreciar, WCF nos brinda un canal seguro de comunicación (a través de contratos) no solo entre aplicaciones de una misma máquina, sino a través de una red que puede estar conformada por servidores Windows o Linux (Interoperabilidad).

Bueno, basta de teoría y veamos como crear un proyecto del tipo WCF en Visual Studio 2010 y utilizando las características 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 cómo se llevará la comunicación entre estos dos entes. A este proceso le llamaremos: Definición del Contrato.

En el Contrato definiremos básicamente lo siguiente:

  • Las operaciones que se podrán realizar.
  • Las firmas y los tipos de datos que se enviarán y/o recibirán durante la invocación de las operaciones.
  • Los protocolos y formatos de serialización que se utilizan para llevar a cabo la comunicación.

Luego de definido esto, recién podemos llevarlo a la programación.

Para el ejemplo voy a definir algo bastante sencillo. Haremos un contrato para permitir la realización de las siguientes operaciones básicas:

  • Factorial de un número
    long Factorial(long x);
  • Devolver una Lista de enteros, con los "n" primeros números de la serie de Fibonacci.
    List<int> Numeros_Fibobacci(int n);
  • Suma de los primeros "n" números de la serie de Fibonacci.
    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 aplicación del tipo WCF Service Library, para implementarlos.

image

Luego de creada la aplicación te pediría 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.

image

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

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 código de la siguiente forma:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;

namespace WCFServiceLibrary
{
    [ServiceContract]
    public interface IMiServicio
    {

    }
}

Ahora codificaremos sólo  las firma de nuestra operaciones anteponiendo a cada una el atributo [OperationContract] , quedando nuestro código de la siguiente forma:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;

namespace WCFServiceLibrary
{
    [ServiceContract]
    public interface IMiServicio
    {
        [OperationContract]
        long Factorial(long x);

        [OperationContract]
        double Sumatoria_Fibonacci(int n);

        [OperationContract]
        List<int> Numeros_Fibobacci(int n);

    }
}

 

Paso 4: Codificando la Clase

Terminada la Interface, debemos de implementar cada Operación, esto lo hacemos en la clase, por lo que debemos de indicar, mediante un identificador, que la clase va a implementar los métodos definidos en la Interface.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;

namespace WCFServiceLibrary
{
    //Al momento de definir la clase, indicamos que implementará los
    //métodos de la Interface IMiServicio
    public class MiServicio:IMiServicio
    {

    }
}

Luego implementamos los métodos que hemos definido.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;

namespace WCFServiceLibrary
{
    //Al momento de definir la clase, indicamos que implementará los
    //métodos de la Interface IMiServicio
    public class MiServicio:IMiServicio
    {
        public long Factorial(long x)
        {
            if (x <= 1 ) return 1;
            else
            {
                return x*Factorial(x - 1);
            }
        }

        public double Sumatoria_Fibonacci(int n)
        {
            List<int> numeros = Numeros_Fibobacci(n);
            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 implementación de las operaciones la he utilizado de forma normal, sin ningún operador o atributo diferente a los que ya conoces.

Paso 5: Cambiando el Archivo de Configuración

 

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 información se coloca por cada uno de los servicios:

<system.serviceModel>
    <services>
	<!-- Nombre del Servicio (Namespace.NombreClase) -->
      <service name="WCFServiceLibrary.MiServicio">
        <host>
          <!-- Direccion del Servicio-->
	  <baseAddresses>
            <add baseAddress = "http://localhost:8732/Design_Time_Addresses/WCFServiceLibrary/MiServicio/" />
          </baseAddresses>
        </host>
        <!-- Service Endpoints -->
        <!-- Unless fully qualified, address is relative to base address supplied above -->
        <endpoint address ="" binding="wsHttpBinding" contract="WCFServiceLibrary.IMiServicio">
          <!--
              Upon deployment, the following identity element should be removed or replaced to reflect the
              identity under which the deployed service runs.  If removed, WCF will infer an appropriate identity
              automatically.
          -->
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <!-- Metadata Endpoints -->
        <!-- The Metadata Exchange endpoint is used by the service 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" contract="IMetadataExchange"/>
      </service>
    </services>

Luego de realizar los cambios podemos probar nuestros servicios, ejecutando nuestra aplicación con F5

Paso 6: Probando nuestro Servicio WCF

image

Al ejecutar la aplicación creada, Visal Studio, ejecuta WCF Test Client, añadiendo el servicio creado y las operaciones que este contempla, de forma que podremos probar si estas se ejecutan adecuadamente.

Para probar cada operación, 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 Función Factorial para un valor de x=5.

image

Como podrás 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 través de servicios que a su vez puedan ser aprovechadas por otras aplicaciones. Espero te sea de ayuda este post para tus trabajos posteriores.


Autor: Victor Parasi

Siempre es difícil escribir sobre uno mismo, qué contar, o por donde empezar, suele ser todo un dilema al momento de presentarse. Aquí vamos. Les diré que soy peruano, Ingeniero por vocación, dedicado a la docencia y siempre en la búsqueda de programar cada vez mejor. Aunque a veces algo terco, sé que no todo en la vida es blanco o negro. Existe el Open Source, y lo respeto pero me llevo mejor con el .Net. Si me hablas de preferencias, te digo que C#, C++, una buena película, colores oscuros, escribir, leer e investigar. Para terminar les diré que amo muchísimo a una mujer espectacular y que es la dueña de mi corazón.


Comentarios (1)

Mario dice:

Bueno Victor, lo primero que quiero es agradecerte a tí y a tu equipo por los aportes por los que queremos aprender. Desde hace años quiero aprender C++, pero siempre estoy sin un buen profe. Así que intento arreglarme con libros y tutoriales. Pero simpre tratan de enseñarte a programar en C++, o sea, el idioma. Pero claro, puedes saber mucho de muebles de madera, pero si no sabes manejar un formón, un serrucho, etc, no vas a llegar a nada. Tu tutorial sobre aplicaciones de consola fue uno entre muchos, pero el único que me sirvió. Ahora estoy con el siguiente, el II y en éste me travé. Cuando pides que se active el Common Lenguage, lo hice pero al llegar a que se debe “hacer referencia al namespace System”, no lo encuentro. Por eso te pido, y disculpa, ¿me ayudas?. Gracias. Mario

Deja un comentario

   

copstone en Facebook

Otros artículos

Sean amigas o enemigas, las funciones siempre son útiles, nos evitan estar reescribiendo el mismo código una y otra vez y nos dan la posibilidad de hacer nuestro código más claro y entendible.

FacebookGoogle BookmarksGoogle GmailTwitterYahoo MailHotmailLinkedInShare

Si crees que sólo hace falta saber de objetos, clases, etc. para conectarse a una Base de Datos, pues te equivocas, tienes que saber también de Servidor, usuarios, passwords, etc. Te dejo este post para que completes tu información y puedas aprender como conectarte a una Base de Datos

FacebookGoogle BookmarksGoogle GmailTwitterYahoo MailHotmailLinkedInShare

Amplia tus conocimientos de programación web y aprende un poco acerca de cookies y como puedes utilizarlas con php y javascript para mejorar tus aplicaciones web.

FacebookGoogle BookmarksGoogle GmailTwitterYahoo MailHotmailLinkedInShare

Este es un artículo que todo programador de Windows debería leer. Si quieres poder tener un mayor control sobre lo que pasa en Windows y poder manipular sus ventanas como mejor te parezca, es necesario que conozcas primero el funcionamiento de las ventanas de Windows.

FacebookGoogle BookmarksGoogle GmailTwitterYahoo MailHotmailLinkedInShare

Tanti auguri! Llegamos a los 50! es momento de celebraciones y junto con la celebración les regalamos un programa.

FacebookGoogle BookmarksGoogle GmailTwitterYahoo MailHotmailLinkedInShare

Calendario

julio 2010
L M X J V S D
« may   nov »
 1234
567891011
12131415161718
19202122232425
262728293031  

Categorías

Comparte este artículo

  • Facebook
  • Google Bookmarks
  • Google Gmail
  • Twitter
  • Yahoo Mail
  • Hotmail
  • LinkedIn
  • Share
TIENES ALGO QUE PREGUNTAR? ESCRÍBENOS AQUÍ

Copyright © 2012 - Programando por diversion

Subir