Está en la página 1de 21

Tutorial WCF Primera Parte: Conceptos básicos de WCF (Windows

Communication Foundation)

En esta primera parte del Tutorial, veremos conceptos básicos pero importantes antes de
comenzar a desarrollar nuestra primera aplicación con WCF. En este post no veremos código,
pero sentaremos las bases con conceptos importantes antes de comenzar con WCF.

Definición:
WCF es un modelo de programación para el desarrollo de aplicaciones con arquitectura
orientada a servicios (SOA). Aplicaciones distribuidas basadas en la comunicación mediante
mensajes.
Principales Características

Una aplicación WCF está compuesta por:


 Clientes: Son aplicaciones que inician la comunicación.
 Servicios: Son aplicaciones que esperan los mensajes de los clientes y
responden a los mismos.
Los mensajes son enviados entre endpoints. Un endpoint (veremos más adelante un poco
más detallado este concepto ) es un lugar donde un mensaje es enviado, o recibido, o ambos.
Un servicio expone uno o más application endpoints, y un cliente genera
un endpoint compatible con uno de los endpoints de un servicio dado.
La combinación de un servicio y un cliente compatibles conforman un communication stack.
Algunos ejemplos de servicios pueden ser:
 Servicio seguro para procesar transacciones comerciales
 Un panel de control que sondea los datos de uno o varios servicios y los
muestra  lógicamente.
 Un servicio de chat que permite a dos personas comunicarse e intercambiar
datos en tiempo real.
 

Conceptos básicos de WCF


Cuando comenzamos con WCF hay muchos conceptos que deberíamos conocer previamente,
por ejemplo algunos son address, binding, contract, endpoint, behavior, etc. Si entendemos
estos términos antes de comenzar a programar, nos serán muy útiles cuando usemos WCF, bien
veamos estos conceptos a continuación.

Address
La address (dirección), especifica el lugar o donde se encuentra el servicio. Especifica la ruta
donde un mensaje será enviado. Todos los servicios son instalados con una dirección
especifica.

Una address es normalmente especificada como una URL, donde la primer parte especifica el
mecanismo de transporte y la segunda parte determina el lugar donde se encuentra el servicio.

Ejemplo:
http://www.ejemplowcf.com/miServicioWCF/EjemploServicio.svc
El ejemplo anterior  utiliza HTTP como protocolo de transporte, esta localizado en el servidor,
www.ejemplowcf.com, y la ruta única al servicio que es miServicioWCF/EjemploServicio.svc
Binding
Bindings son usados para especificar los detalles del transporte, encoding y  protocolo
requeridos por los clientes y servicios para comunicarse unos con otros. Los bindings en WCF
son usados para la representación de un endpoint. Y un endpoint es un lugar donde los clientes
pueden comunicarse con el servicio de WCF.  La forma fácil de que un cliente se comunique
con el servicio es usar el mismo binding que el servicio usa.

Un binding esta compuesto por una colección de elementos. Cada elemento describe algunos
aspectos de como el servicio se comunicará con el cliente. Un binding debe al menos incluir un
elemento de transporte, un message-encoding (este es provisto por el elemento transporte por
defecto), y por último una o varias definiciones del elemento de protocolo.

Algunos ejemplos de bindings en WCF son: BasicHttpBinding, WSHttpBinding, etc. Cada uno
de estos bindings tiene predefinidos elementos requeridos para una tarea en especial, y están
prontos para ser usados en su proyecto. Por ejemplo BasicHttpBinding usa el protocolo HTTP
como transporte para enviar mensaje SOAP 1.1 y tiene atributos y elementos como
receiveTimeout, sendTimeout, maxMessageSize, etc. Puede usar la configuración por defecto
de atributos y elementos  de BasicHttpBinding o puede sobrescribirlos dependiendo de su
necesidad.

Contract
Un contract  es un conjunto de especificaciones que define la interfaz de un servicio WCF. Un
servicio WCF se comunica con otras aplicaciones de acuerdo a su contrato. Hay muchos tipos
de contractos en WCF, tales como Service contract, operation contract, data contract, message
contract y fault contract.

El contrato de servicio (Service contract)


Un service contract es la interface de un servicio WCF. Nos dice que puede hacer un servicio.
Dentro de estas interfaces, se puede definir una cantidad de métodos o operaciones que
especifican las tareas del servicio. Un Servicio WCF tiene que tener al menos un contracto para
recibir los pedidos de los clientes que lo consumen.

 El contrato de operación (Operation contract)


Un operation contract esta definido dentro  de un service contract, y define los parámetros y el
tipo de retorno de una operación. Una operación puede tomar un dato primitivo por ejemplo un
char, un int como parámetro o incluso un mensaje, el cual debería ser definido como un
message contract (veremos la explicación de este concepto más abajo).

Tenemos el service contract que es la definición de la interface del servicio, y tenemos el


operation contract que es la definición de una operación. La definición del operation contract
también define la dirección de la operación (one way, request/replay, duplex).

El contrato de mensajes (Message contract)


Si un operation contract necesita pasar un mensaje como parámetro o retornar un mensaje, el
tipo de estos mensajes debe ser definido como message contract. Un message contract define
los elementos de un mensaje, como por ejemplo la seguridad del mensaje y también el
elemento que debe ir en el cabezal y cuerpo del mismo.

El contrato de datos (data contract)


El data contract son los tipos de datos de un servicio WCF. Todos los tipos de datos usados por
el servicio WCF deben ser descriptos en la metadata para habilitar a otras aplicaciones a
interoperar con el servicio. Un data contract puede ser usado por un operation contract como
parámetro o el tipo de retorno, o puede ser incluso usado por un message contract. Si el servicio
WCF solo usa tipos primitivos (int, char, etc) no es necesario definir un data contract.

El contrato de error (fault contract)


SI un operation contract retorna un error al cliente que lo llamo, el cliente debe ser advertido de
ese error. Estos tipos de errores son definidos como fault contract.

Endpoint
Los mensajes son enviados entre endpoints. Y los endpoints son el lugar donde los mensajes
son enviados y recibidos o ambos, y tienen toda la información requerida para el intercambio
de mensajes. Un servicio puede exponer uno o mas endpoints. Cuando necesitamos conectarnos
al servicio, la aplicación cliente genera un endpoint que es compatible con el endpoint del
servicio.
Un servicio de WCF tiene un binding, un address y un service contract, esto es conocido como
el ABC de Windows Communication Foundation.

Behavior
Un behavior es un tipo de configuración para extender la funcionalidad de un componente de
WCF. Tenemos muchos tipos de bahaviors en WCF, por ejemplo un service behavior, binding
behavior, contract behavior, etc. Los behaviors son configurados en el archivo de configuración
de WCF.

Hosting
Un servicio WCF es un componente que puede ser llamado por otras aplicaciones. Por esto, el
servicio debe ser alojado en un ambiente  para ser usado por otras aplicaciones. El ambiente
que aloja nuestro servicio WCF, es una aplicaci’on que maneja y controla el tiempo de vida de
nuestro servicio.

Channels (Canales)
Hemos visto previamente que un servicio WCF debe ser alojando en algún ambiente (puede ser
una aplicación o un server). La aplicación cliente tiene que especificar los bindings necesarios
para conectarse al servicio WCF. Ahora los elementos del binding, son interfaces y deben ser
implementados en clases concretas.  Esta implementación de un elemento del binding es lo que
llamamos channel.(canal). Un elemento del binding representa una configuración y el channel
es la implementación asociada con esa configuración. En resumen, tenemos un channel por
cada elemento del binding.

 Metadata
La metadata de un servicio describe las características de un servicio a una entidad externa para
poder comunicarse con el servicio. Para explicarlo un poquito más, la metadata puede ser
consumida usando la utilidad de SvcUtil.exe el cual genera una clase proxy y la configuración
que la aplicación cliente puede usar para interactuar con el servicio.

La metadata que expone el servicio incluye el esquema del documento XML que define el data
contract del servicio y los documentos WSDL que describen los métodos del servicio.

Bueno hasta aquí la primer parte de este tutorial, fue un poquito largo pero fue necesario para
explicar conceptos base que son importantes a la hora de empezar con el desarrollo de un
servicio WCF. En el próximo post, comenzaremos a codificar y veremos como desarrollar
nuestro primer servicio en WCF. Hasta la próxima.
Luego de la primera parte de este tutorial, en la cual vimos los conceptos básicos pero
necesarios acerca de WCF, veremos aquí como crear un servicio WCF simple, aplicando lo
visto anteriormente.

Necesitaremos los siguiente:

 Microsoft .NET Framework 4.5.1 o mayor


 Microsoft Visual Studio 2013, 2015 o 2017
 Microsoft SQL Server 2016, 2014, 2012, o Express
 Internet Information Server 7.0, 7.5 o 8.0
 Windows 7, Windows 8 o Windows 10
Antes de comenzar con nuestro proyecto en Visual Studio, crearemos directorios en nuestra
computadora para salvar todos los archivos generados. Esto también se puede hacer directo
desde Visual Studio al momento de crear el proyecto.

Salvaremos nuestro proyecto en C:\ProyectoWCF\Proyectos


Seguiremos los siguientes pasos para crear nuestro primer servicio WCF:

1. Comenzamos abriendo Visual Studio 2017 (puede usar la versión Community,


Professional, Enterprise o algunas de las versiones mencionadas arriba)
2. Primero iremos al menu superior y haremos click en File  -> New -> Project….
La ventana de dialogo de nuevo proyecto se abrirá.

3. En la parte izquierda de este formulario, expandir la opción Installed -> Other Project


Types y seleccionar el template Visual Studio Solutions.  Desde la sección media de este
formulario seleccionamos Blank Solution. 
4.Debajo en el formulario de New Project, como nombre de solución 
digitamos MiPrimerServicioWCF  y en Location seleccionamos  C:\ProyectoWCF\Proyectos
como directorio utilizando el botón Browse.
5. Hacemos click en el boton OK, esto cierra el formulario de New project y nuestra pantalla
deberá mostrarse como la imagen aquí debajo.

6. Dependiendo de su configuración en el entorno de desarrollo podria ser algo diferente. Si


usted no ve el Solution Explorer, puede ir a la opción View en el menu principal de Visual
Studio y seleccionar la opción Solution Explorer o presionar en su teclado Ctrl + W + S (este
atajo de teclado es en Visual Studio 2017, puede diferir en otras versiones de Visual Studio).

7. En la seccion del Solution Explorer, debemos hacer click en el botón derecho sobre la
solución y seleccionar Add -> New Project… desde el menu contextual. La imagen aquí debajo
muestra el menu contextual para agregar un nuevo proyecto.
.8. El formulario de Add New Project debería abrirse. En la parte izquierda de este formulario,
seleccionar Installed -> Visual C#, y en la seccion media del formulario seleccionar Class
Library.
9. En la parte inferior del formulario de Add New Project, digitar PrimerServicioWCF en el
campo nombre. Dejar el directorio seleccionado por defecto en la opcion Location. No es
necesario agregar MiPrimerServicioWCF en la opcion Location porque Visual Studio crea este
directorio de forma automatica.
Cuando vemos los templates que nos ofrece Visual Studio podemos haber notado que existe
uno que es WCF Service Application. Pero no lo utilizaremos en principio, así podremos crear
desde 0 todas las cosas necesarias para nuestro servicio. Es una buena forma de entender com
funciona esta tecnología.

10. En el formulario anterior hacemos click en el botón Ok, y luego de eso, el formulario se


cerrara y Visual Studio creara una serie de archivos para nuestro servicio. El primer archivo es
un proyecto. Es un archivo xml y esta en nuestro directorio donde lo creamos y su nombre
es PrimerServicioWCF.csproj.
Aparte de esto, Visual Studio crea un clase vacía llamada Class1.cs a la cual le cambiaremos el
nombre por uno mas descriptivo más adelante.

Nuestro entorno de desarrollo debería parecerse mucho a la imagen que les dejo debajo.

Hasta aquí creamos una nueva solución y un nuevo proyecto. En este proyecto crearemos
nuestro primer servicio WCF. La última cosa que nos faltaría antes de empezar a crear nuestro
servicio sería agregar la referencia a la librería System.ServiceModel. Para ello seguiremos
estos pasos:

1. En la sección del Solution Explorer, hacemos click derecho sobre el


proyecto PrimerServicioWCF  y seleccionamos Add -> Reference… desde el
menu contextual. Luego de estas acciones el formulario de Reference
Manager aparecerá como sigue:
Marcamos la cajita de chequeo  al lado de System.ServiceModel y luego hacemos click en el
botón OK.
Ahora si hacemos click dentro del Solution Explorer en References dentro del
proyecto PrimerServicioWCF, veremos que la librería System.ServiceModel fue agregada.
Definiendo el contrato de nuestro servicio
En la sección previa, creamos la solución y el proyecto para el servicio PrimerServicioWCF.
En esta sección, comenzaremos a construir el servicio PrimerServicioWCF. El primer paso para
esto es definir el contrato de nuestro  servicio creando una interfaz.  Seguiremos estos pasos:

1.  En la sección del Solution Explorer hacemos click derecho en el


proyecto PrimerServicioWCF y seleccionamos ADD -> New Item… desde el
menu contextual. El formulario de Add New Item se abrirá y se mostrará como
en la siguiente imagen.
2. En la parte izquierda del formulario de Add New Item, debemos seleccionar Installed -
> Visual C# Items como template, y en la parte media de este formulario
seleccionamos Interface.
3. En la parte inferior del formulario Add New Item, cambiar el nombre por defecto
a IPrimerServicioWCF.cs
4. Por ultimo debemos hacer click en el botón Add.
Ahora generamos un interface para nuestro servicio vacía y ha sido agregada a nuestro
proyecto. Para indicarle al servicio que deseamos utilizarlo como contrato, seguiremos estos
pasos.

1. Agregar una sentencia using

2. Agregar un atributo ServiceContract arriba de la definición de la interfaz. Este atributo


designa la interfaz como un contrato de servicio.

3. Agregar un método a la interface que se llame ObtenerMensaje. Este método tendrá como


tipo de parámetro de entrada un string y retornará otro tipo string como parámetro de salida.
4. Cambiar la interfaz a pública.

El contenido de interfaz deberá quedar como sigue.


Implementando nuestra interfaz del servicio
Hasta aquí hemos definido la interfaz de nuestro servicio (service contract), y ahora
necesitamos implementarla. Para este propósito utilizaremos la clase vacía que fue generada al
crear el proyecto e implementaremos nuestra interfaz en ella.

Antes de modificar este archivo, necesitamos renombrarlo. En la sección del Solution


Explorer , hacemos click derecho sobre el archivo Class1.cs, seleccionamos Rename en el
menu contextual, y llamamos a la clase como PrimerServicioWCF.cs. Visual Studio cambiará
todo los archivos relacionados con las referencias a esta clase de forma automática al cambiar
el nombre.
Ahora realizaremos los siguientes pasos para modificar la clase:

1. Abrir la clase PrimerServicioWCF.


2. Implementaremos nuestra interfaz como sigue:

3. Agregar un método que se llame ObtenerMensaje. Este será el método que devuelva un


string. Otra forma de implementar la interfaz, es seleccionando el nombre de la interfaz en la
clase y luego hacer botón derecho y seleccionar del menu contextual Implement Interface para
agregar el cuerpo del método.
El final del contenido de MiPrimerServicioWCF deberá quedar como se muestra en la
siguiente imagen:
Por último compile el proyecto. Si usted no obtiene ningún error significa que ha creado de
forma exitosa el servicio WCF.

Bien hasta aquí hemos creado una solución con un proyecto que permitió crear un servicio
WCF. En la próximo parte de este tutorial veremos como alojar (host) nuestro servicio en algún
ambiente para de esa forma quede pronto para poder ser consumido por una aplicación cliente.
Cualquier consulta o pregunta pueden dejarla aquí debajo. Debajo aquí les dejo el código hasta
aquí desarrollado. Hasta la siguiente parte.

https://github.com/dotnetuyCode/MiPrimerServicioWCF/blob/master/MiPrimerServicioWCF.rar

Tutorial WCF Tercera Parte: Alojando (Hosting) nuestro Servicio WCF


(Windows Communication Foundation)

Bienvenidos a esta tercera parte del Tutorial de WCF. Como recordarán en la segunda parte de
este tutorial, habíamos visto como crear un servicio WCF, ahora que nuestro servicio esta
creado y como el mismo es una librería de clases (class library) debemos alojarlo en algún
ambiente para que pueda ser consumido por una aplicación cliente.

 Creando el alojamiento (hosting) para nuestra aplicación en IIS Express


Hay muchas maneras de crear aplicaciones host para nuestros servicios WCF en Visual Studio,
pero en esta ocasión crearemos una aplicación host manualmente para entender como realmente
funciona y cuales son todos los pasos necesarios en este proceso. Para poder alojar nuestra
librería de clases en IIS Express  debemos crear un sitio web. Veamos cuales son estos pasos
de creación:
1. En el  Solution Explorer debemos hacer click derecho sobre el nombre de la
solución MiPrimerServicioWCF y seleccionar ADD -> New Web Site… desde
el menu contextual. El formulario de Add New Web Site se abrirá.
2. Seleccionar Visual C# -> ASP.NET Empty Web Site como template y dejar la
opción Web Location con el valor File System, pero debemos cambiar el folder
a C:\ProyectoWCF\Proyectos\MiPrimerServicioWCF\HostServer  y hacer
click en OK.
3. Ahora en el Solution Explorer veremos un nuevo item  dentro de la solución. El solution
explorer mostrará lo siguiente.

4. El siguiente paso es poner nuestro sitio web como proyecto de arranque. Debemos en
el Solution Explorer hacer click derecho sobre el sitio web HostServer y seleccionar Set as
StartUp Project desde el menu contextual. Ahora luego de esta configuración en el Solution
explorer el sitio web HostServer debería estar destacado en negrita.
5. Como alojaremos PrimerServicioWCF en este sitio web, debemos agregar una referencia
de PrimerServicioWCF al sitio web. Para esto, debemos hacer click derecho sobre el sitio
web HostServer y seleccionar Add -> Reference… desde el menu contextual. El formulario de
Reference Manager debería aparecer como se muestra en la siguiente imagen.

6. En el formulario de Reference Manager, debe hacer click en el tab Projects. Debemos hacer


click en la cajita de check al lado de PrimerServicioWCF y luego click en el botón OK. Esto
creará un directorio bin bajo el sitio web HostServer y dos archivos mas que fueron copiados a
este nuevo directorio desde el proyecto PrimerServicioWCF. Cuando el sitio web esta
corriendo, el servidor IIS Express ejecutará el código en el directorio bin.
Como hacer test de nuestra aplicación de alojamiento (host)
Ahora podemos correr el nuevo sitio web HostServer. Si presionamos Ctrl + F5 o podemos
hacer los mismo desde el menu de Visual Studio DEBUG -> Start Without Debugging y luego
de esto veremos un sitio web vacío en el browser con un error.
 
Si por el contrario seleccionamos del menu DEBUG -> Start Debugging podremos ver un
formulario que nos advertirá que la depuración no esta habilitada (Debugging Not Enable).
¿ Que es IIS Express ?
Luego de ejecutar nuestro sitio web HostServer debería estar configurado y corriendo. Ahora
este sitio corre dentro del IIS Express. IIS Express es una versión más liviana y optimizada
para los desarrolladores. Este servicio web es similar IIS (Internet Information Server), pero
tiene algunas limitaciones, por ejemplo solo soporta protocolos HTTP y HTTPS.
Cuando creamos un sitio web con Visual Studio, IIS Express automáticamente asigna un
puerto para el. Podemos ver que puerto fue asignado a nuestro sitio web en la ventana
de Propiedades de nuestro sitio web.
Normalmente IIS Express es ejecutado dentro de Visual Studio cuando necesitamos debuguear
nuestro sitio web. Pero existe otra opción para ejecutar el IIS Express desde fuera de Visual
Studio, y podemos ejecutar la siguiente línea de comandos con los siguiente parámetros:
“C:\Program Files\IIS Express\iisexpress”  /path:c:\aplicación\  /port:[puerto] /clr:v4.0
En este caso para nuestro sitio web debería ser como sigue:

“C:\Program Files\IIS Express\iisexpress”  /path:C:\ProyectoWCF\Proyectos\


MiPrimerServicioWCF\HostServer /port:57514 /clr:v4.0
Tener en cuenta que iisexpress.exe esta en la Program Files\IIS Express. Si nuestro sistema es
x64 debería estar en Program Files (x86)\IIS Express.
Debemos Modificar el archivo Web.Config.
Hasta aquí ejecutamos nuestro sitio web pero solo es un sitio web vacío. Por ahora no esta
alojando nuestro servicio PrimerServicioWCF. ¿Pero por qué es esto?, porque no hemos
definido que servicio nuestro sitio web debería alojar.
Para especificar que servicio va alojar nuestro sitio web, debemos agregar un archivo .svc al
mismo. Bien debemos modificar el archivo Web.Config de nuestro sitio web para alojar
nuestro servicio PrimerServicioWCF. Abriremos el archivo Web.config de nuestro sitio web y
deberemos cambiar lo siguiente.
El código agregado a la sección system.serviceModel es lo único que agregaremos aquí.
–httpGetEnabled es una configuración importante aqui, porque queremos que otras
aplicaciones esten posibilitadas de localizar la metadata de este servicio a través del protocolo
HTTP. Sin la metadata, la aplicación cliente no puede generar el proxy y no podrá configurarlo
para poder usar el servicio.
nodo configuration en este archivo es lo que llamamos el nodo raíz.
nodo system.serviceModel es nodo que incluye toda la configuración para el servicio WCF.
nodo serviceHostingEnvironment es usado para especificar el ambiente del hosting.
nodo serviceActivations es donde especificamos el nombre del servicio y su dirección relativa.
Dentro del nodo serviceBehaviors, podemos definir distintos comportamientos para un servicio.
En nuestro ejemplo hemos especificado un comportamiento para leer la metadata de nuestro
servicio.
Ejecutando la aplicación de alojamiento (host)
Ahora si ejecutamos el sitio web presionando Ctrl + F5, volveremos a ver el mismo sitio vacío
que antes con el mismo error. Pero ahora tenemos un servicio alojado en nuestro sitio web, solo
debemos agregar lo siguiente a nuestra dirección del sitio
web HostServer/PrimerServicioWCF.svc . Ahora nuestra URL debería ser de la siguiente
manera: http://localhost:57514/HostServer/PrimerServicioWCF.svc. Luego de esto podremos
ver la descripción de nuestro servicio, que es el archivo wsdl, o como crear un cliente para
consumir este servicio. En nuestro browser veremos una página similar a la siguiente:
Si hacemos click en link WSDL de esta página obtendremos el archivo XML del WSDL para
este servicio. El archivo WSDL nos devuelve toda la información del contrato de este servicio.
En la próxima parte de este tutorial utilizaremos esta información para generar nuestro proxy
para nuestra aplicación cliente.
Bien hasta aquí esta tercera parte del tutorial, vimos como podemos alojar nuestro servicio en
IIS Express y como podemos obtener toda su información. Si tiene alguna duda o comentario
puede dejarlo debajo de este post. Hasta la próxima parte.

Tutorial WCF Cuarta Parte: Creando un cliente para consumir nuestro


Servicio WCF (Windows Communication Foundation)
Bienvenidos a esta cuarta parte del Tutorial de WCF. Como recordarán en la tercera parte de
este tutorial, habíamos visto como alojar nuestro servicio WCF, ahora que nuestro servicio esta
creado y alojado necesitaremos un cliente que consuma nuestro servicio. Crearemos una
aplicación cliente que consuma dicho servicio HolaServicioWCF.

Crearemos una aplicación de consola windows para llamar al servicio WCF

Creando el proyecto de la aplicación cliente.


Primero de todo, necesitamos crear una aplicación de consola y agregarla a la solución.
Deberemos seguir los siguientes pasos para crear la aplicación de consola.

1. En el Explorador de soluciones, debemos hacer click derecho en la solución


‘MiPrimerServicioWCF‘ y seleccionar Add -> New Project... desde el menu
contextual. La ventana de diálogo de “Add New Project” debería aparecer,
como muestra la siguiente captura de pantalla.
2. Seleccionar el template Visual C# | Console App (.NET Framework), cambiar el nombre del
proyecto a HolaServicioWCF y dejar la opción Location con la ruta seleccionada de la
solución. Hacemos click en el botón Ok y el nuevo proyecto es creado y agregado a nuestra
solución.
Generando el proxy y los archivos de configuración
Para consumir un servicio WCF SOAP, el cliente que acabamos de crear debe primero obtener
o generar una clase proxy.

También necesitamos un archivo de configuración para especificar cosas como el binding del
servicio, la dirección del servicio y el contracto.

Para generar estos dos archivos, usaremos una herramienta SvcUtil.exe en la línea de
comandos. Debemos seguir estos pasos para generar los dos archivos.

1. Ejecutar el servicio presionando Ctrl + F5 o seleccionar la opción del


menu DEBUG | Star Without Debugging (en este punto su proyecto de
arranque (startup project) debería ser HostServer, sino es así debe configurarlo
como proyecto de arranque.)
2. Luego de que el servicio ha sido ejecutado, debemos abrir una ventana de línea
de comando, cambiarnos al directorio donde se encuentra nuestra aplicación
cliente (C:\ProyectoWCF\Proyectos\MiPrimerServicioWCF\
HolaServicioWCF), y luego correr la herramienta SvcUtil.exe en la línea de
comandos con la siguiente sintaxis (podría ser un directorio diferente en su
maquina si ha elegido otro para hacer este tutorial y puerto y deberá sustituirlo
con el directorio y puerto  correspondiente.)
“C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\
SvcUtil.exe” http://localhost:57514/HostServer/PrimerServicioWCF.svc?wsdl
/out:PrimerServicioWCFRef.cs /config:app.config:

Hasta aqui dos archivo han sido generados, uno para el proxy (PrimerServicioWCFRef.cs) y el
otro para la configuración (app.config).
Si abrimos el archivo del proxy, veremos que la interfaz del servicio es reproducida ahi dentro.
Dentro de esta clase, la implementación de la operación del servicio (ObtenerMensaje) es solo
un contenedor que delega la llamada a la implementación del servicio real de la operación.
Dentro del archivo de configuración, veremos las definiciones de PrimerServicioWCF como
por ejemplo el endpoint  address, binding, timeout, security and behaviors del servicio.
Personalizando la aplicación cliente
Antes de correr la aplicación cliente, debemos hacer algún trabajito extra. Estos son los
siguientes pasos que debemos seguir:

1. Cuando vayamos a Visual Studio 2017 (es la versión que estoy utilizando en


este tutorial, pero pasará lo mismo con cualquier otra versión de Visual Studio)
nos abrirá una ventana de diálogo para recargar el archivo app.config,  porque
este ha sido cambiado. Debemos hacer click en el botón Yes para recargarlo.
2. Agregar el archivo del proxy al proyecto. En la solución del proyecto, primero
seleccionamos el proyecto HolaServicioWCF y luego hacer click en Show All
Files para mostrar todos los archivos. Ahora bajo la
carpeta HolaServicioWCF veremos el archivo del
proxy(PrimerServicioWCFRef.cs), sin embargo este archivo aun no esta
incluido en el proyecto. Debemos hacer click derecho sobre el y seleccionar la
opción Include in Project para incluirlo en el proyecto del cliente.  Podemos
también usar la opción del menu Project | Add Existing Item… (o en el menú
contextual Add | Existing Item…) para agregarlo al proyecto.
3. Agregar una referencia al namespace System,ServiceModel. Desde el
explorador de soluciones, debemos hacer click derecho en el
proyecto HolaServicioWCF, seleccionar Add | Reference…, y
marcar System.ServiceModel  bajo Assemblies | Framework. Luego, debemos
hacer click en el botón OK para agregar la referencia a el proyecto.
4. Modificar el archivo program.cs para llamar al servicio.
En program.cs agregamos la siguiente línea para inicializar el objeto cliente del
servicio.
    var client = new PrimerServicioWCFClient();
           Luego, podemos llamar al método ObtenerMensaje de nuestro objeto recién creado.

   Console.WriteLine(client.ObtenerMensaje(“Hola WCF”));
Corriendo la aplicación cliente
Ahora estamos preparados para correr la aplicación cliente.

Primero, debemos asegurarnos que la aplicación que hace de host, HostServer, ha sido


ejecutada, Si anteriormente la hubiésemos parado, ejecútela ahora (necesitamos configurar
HostServer como proyecto de arranque (Startup project) y presionar las teclas Ctrl + F5 para
ejecutarla en el modo de no depuración, o podemos solo hacer click derecho en el
proyecto HostServer y seleccionar View in Browser (Microsoft Edge) desde el menu
contextual.
Luego, desde el explorador de soluciones, debemos hacer click derecho  en el
proyecto HolaServicioWCF, seleccionar Set as Startup Project, y luego presionar Ctrl + F5
para correrlo.
Veremos las siguiente salida, como muestra la  imagen:

Configuración de la aplicación de servicio para inicio automático


Como sabemos debemos ejecutar la aplicación que aloja nuestro servicio antes de correr el
programa cliente. Para esto debemos hacer algunos cambios en la solución para poder
automatizar esta tarea, esto es, para automatizar la corrida del servicio antes que corra la
aplicación cliente.

Para hacer esto, en el Explorador de la solución, debemos hacer click derecho sobre nuestra
solución y seleccionar la opción Properties desde el menu contextual, y luego veremos la
ventana de diálogo de propiedades de la solución:
 
En este formulario, primero debemos seleccionar la opción Multiple startup projects, Luego
cambiar la acción de HostServer a Start without debugging. Cambiar HolaServicioWCF a la
acción Start.
Importatnte: La aplicación HostServer debe estar arriba del proyecto HolaServicioWCF . Si
no es así, usamos las flechas que se encuentran a la derecha para moverlo hacia arriba,
Para poder probar esta configuración, primero pararemos el servicio si lo estamos corriendo, y
presionamos Ctrl + F5. Notaremos que HostServer es ejecutado primero, y luego la aplicación
cliente es la que corre. Bueno hasta aquí este post de como crear una aplicación cliente que
consuma un servicio WCF. Seguiremos en el siguiente post, con nuevas formas de alojar
nuestros servicios WCF. Si desea dejar alguna consulta o comentario, puede dejarlo aquí debajo
del post. Hasta la próxima !!

También podría gustarte