En esta oportunidad vamos a revisar como hacer nuestra primer aplicación que integre un servicio de WCF en un proyecto de Silverlight. Como es costumbre, el contenido busca acercarte este ejemplo de la manera más simple y para esto comenzamos creando un proyecto de tipo Silverlight Application en la categoría de Silverlight.

Para probar nuestro proyecto Visual Studio propone crear un proyecto que nos sirva de host y para esto en la siguiente ventana dale OK con los valores por default, como aparece en la imagen

Esto nos va a crear un proyecto adicional con la estructura de una aplicación web.
En la página principal MainPage.xaml incluye un control de tipo TextBlock y un Botón, como lo siguiente:

En este ejemplo estaremos utilizando una plantilla que se llama Silverlight-enabled WCF Service para lograr nuestro objetivo. Para esto sobre tu proyecto host, selecciona la opción de Agregar nuevo elemento y después selecciona el elemento Silverlight-enabled WCF Service de la categoría Silverlight.

Revisa la estructura de proyecto y encontrarás que se agregaron nuevos archivos, dale un vistazo al archivo SimpleService.svc.cs, el cual contiene algo como lo siguiente:
using System;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Activation;
namespace HolaSilverlightWCF4.Web
{
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class SimpleService
{
[OperationContract]
public void DoWork()
{
// Add your operation implementation here
return;
}
// Add more operations here and mark them with [OperationContract]
}
}
Como te podrás dar cuenta la clase aparece marcada con un atributo de nombre AspNetCompatibilityRequirements el cual al ser incluido nos da la opción de tener compatibilidad side-by-side con ASP.NET.
Agrega el siguiente método a tu código:
// Add more operations here and mark them with [OperationContract]
[OperationContract]
public string HelloWorld()
{
return "Hello World Silverlight";
}
Listo, para utilizar el servicio en nuestro proyecto de Silverlight lo único que hay que generar es la referencia al servicio con la opción de Add Service Reference
En la ventana de referencia, da clic en la opción de Discover para que lo busque en la solución y te devuelva el servicio a utilizar, confirma que el servicio incluya el método que acabas de definir y dale un nombre a la referencia para que lo puedas identificar en tu proyecto

Ahora para invocar el servicio vamos a generar el manejador del clic del botón, para hacer el llamado del método, para eso agrega el siguiente código:
private void button1_Click(object sender, RoutedEventArgs e)
{
HelloWorldInfo.SimpleServiceClient proxy =
new HelloWorldInfo.SimpleServiceClient();
proxy.HelloWorldCompleted += (s, p) => {
if (p.Error==null&&!p.Cancelled)
{
textBlock1.Text = p.Result;
}
};
proxy.HelloWorldAsync();
}
NOTA: El proxy únicamente ofrecerá la llamada asíncrona de tu servicio para así poder prevenir deadlocks en el hilo principal
Ejecuta tu proyecto y prueba dando clic en el botón, el resultado será el siguiente:

Listo, con esto tienes tu primer acercamiento simple para invocar un servicio WCF desde Silverlight; ten en cuenta que esta forma de trabajar es integrar el servicio con la compatibilidad de ASP.NET, y va en contra de los fundamentos de SOA en cuanto a la manera de exponer el servicio WCF, donde lo ideal será que tanto el contrato como la implementación del servicio sean proyectos completamente independientes.
Para esto te invito a que lo pruebes de esta manera y comiences a crecer tu conocimiento en esta área.
Descarga de este ejemplo disponible aquí
Agradeciendo tu interés en este artículo, nos encontramos en la próxima.
Posted
10-14-2010 2:07 PM
by
Marcos