lunes, 11 de julio de 2011

Usando los servicios WCF (SFS Tools) desde una aplicación cliente

En este ejemplo usaremos los servicios de WCF (Windows Communication Foundation) creados automáticamente con  SFS Tools desde una aplicación de ejemplo. El objetivo en identificar las diferentes formas de interactuar con las reglas de negocio expuestas a través de la capa de servicios totalmente automatizada.

Pasos

  1. Crear el proyecto de ejemplo con los servicios WCF
  2. Agregar un proyecto de tipo Windows Forms (C#)
  3. En este nuevo nuevo proyecto de pruebas, haz clic derecho y selecciona  “Add Service Reference“.
    image
  4. En la ventana de “Add Service Reference” haz clic en la flecha del botón “Discover” y selecciona “Services in solution”.
    image
  5. Selecciona el end point GlobalService.svc y observa la lista de métodos que se muestran en la sección de operations.
    image
  6. Haz clic en el botón “Advanced…” y en la ventana de “Service Reference Settings” selecciona la opción: “Generate Asynchronous operations” y “Always generate message contracts”. En “Collection type” selecciona “System.Collections.Generic.List” y haz clic en “Ok”.
    image
    En la solución ahora existe una referencia de servicios de nombre WCF.
    image
  7. En el archivo Form1.cs en modo diseño, agrega cinco botones, uno para cada operación CRUD y otro más para el método “Count”.
    image

A continuación para cada botón agregamos funcionalidad para probar las operaciones CRUD de los servicios.

Agregando un registro (Create)

image

 #region Create method
private void btnCreate_Click(object sender, EventArgs e)
{
WCF.GlobalServiceContractClient clientService = new WCF.GlobalServiceContractClient();
clientService.ProductsCreateCompleted += new EventHandler<WCF.ProductsCreateCompletedEventArgs>(clientService_ProductsCreateCompleted);
WCF.ProductsRequest request = new WCF.ProductsRequest();
request.Item = new WCF.Product();
request.Item.Name = "Classic Picture";
request.Item.ProductModel = new WCF.ProductModel() { ProductModelID = 1 }; // Is a existent model
// TODO: Setting all properties
// if the product exist
// and you want find by name
//request.Item.ProductModel =
// clientService.ProductModelsGetBy(
// new WCF.ProductModelsRequest() {
// FilterExpression = @"Name = ""Classic Vest""" }
// ).Item;
clientService.ProductsCreateAsync(request);
}

void clientService_ProductsCreateCompleted(object sender, WCF.ProductsCreateCompletedEventArgs e)
{
// Te create method has been successful
}
#endregion

Consultando  registros (Read)


image

#region Read
private void btnRead_Click(object sender, EventArgs e)
{
WCF.GlobalServiceContractClient clientService = new WCF.GlobalServiceContractClient();
clientService.ProductsGetByCompleted += new EventHandler<WCF.ProductsGetByCompletedEventArgs>(clientService_ProductsGetByCompleted);
WCF.ProductsRequest request= new WCF.ProductsRequest();
request.FilterExpression = @"ProductModel.ProductModelID = 1 And Name.Contains(""Ch"")"; // query in dinamyc Linq

clientService.ProductsGetByAsync(request);

}
void clientService_ProductsGetByCompleted(object sender, WCF.ProductsGetByCompletedEventArgs e)
{
if (e.Error != null)
{
var result = e.Result.Items;
}
}
#endregion

Modificando un registro (Update)


image

        #region Update
private void btnUpdate_Click(object sender, EventArgs e)
{
WCF.GlobalServiceContractClient clientService = new WCF.GlobalServiceContractClient();
clientService.ProductsUpdateCompleted += new EventHandler<WCF.ProductsUpdateCompletedEventArgs>(clientService_ProductsUpdateCompleted);
WCF.ProductsRequest request = new WCF.ProductsRequest();
request.FilterExpression = "ProductID = 317"; // query for get record
request.Item = clientService.ProductsGetBy(request).Item; // Getting record
request.Item.Name = "LL Crankarm 2"; // modifying record
clientService.ProductsUpdateAsync(request);

}

void clientService_ProductsUpdateCompleted(object sender, WCF.ProductsUpdateCompletedEventArgs e)
{
var result = e.Result.Item;

}
#endregion

Eliminando un registro

image
  #region Delete
private void btnDelete_Click(object sender, EventArgs e)
{
WCF.GlobalServiceContractClient clientService = new WCF.GlobalServiceContractClient();
clientService.ProductsDeleteCompleted += new EventHandler<WCF.ProductsDeleteCompletedEventArgs>(clientService_ProductsDeleteCompleted);

WCF.ProductsRequest request = new WCF.ProductsRequest();
request.Item = new WCF.Product() { ProductID = 317 }; // The existent product
clientService.ProductsDeleteAsync(request);

}

void clientService_ProductsDeleteCompleted(object sender, WCF.ProductsDeleteCompletedEventArgs e)
{
// The record has been deleted
}
#endregion

Contando los registros a partir de una consulta


image

 #region Count
private void btnCount_Click(object sender, EventArgs e)
{
WCF.GlobalServiceContractClient clientService = new WCF.GlobalServiceContractClient();
WCF.ProductsRequest request = new WCF.ProductsRequest();
request.FilterExpression = @"ProductModel.ProductModelID = 1 And Name.Contains(""Ch"")"; // query in dinamyc Linq

int records = clientService.ProductsGetCount(request).Records;

}

#endregion

Conclusión


Con SFS Tools es muy fácil implementar toda la funcionalidad nativa (CRUD) respecto a los objetos de negocio  sin que eso implique un mayor esfuerzo. Con esta estrategia de desarrollo  los costos que pude implicar la implementación de WCF es muy menor.

No hay comentarios.:

Publicar un comentario