Na primeira parte de nosso post sobre WCF Data Service vimos como criar nosso serviço e executar algumas pesquisas utilizando URI. Hoje veremos como consumir nosso serviço além de conhecermos um pouco mais sobre a liberação de acesso às entidades.

Abram o projeto anterior, vamos começar dando uma olhada nas permissões de acesso de nossas entidades.

No trecho de código da listagem 01 definimos que todas as entidades receberão livre acesso, ou seja, o chamador do serviço terá total acesso a elas tanto para leitura quanto para escrita.

Listagem 01

config.SetEntitySetAccessRule("*", EntitySetRights.All);

 

O método SetEntityAcessRule recebe dois parâmetros, no primeiro deles nós informamos qual será a entidade e no segundo qual o tipo de permissão que iremos liberar. Abaixo podemos ver cada item da enum de permissões.

EntitySetRights Enumerator

All – permite total acesso à entidade (escrita/leitura)

AllRead – permite somente leitura

AllWrite – permite somente escrita

None – nega qualquer tipo de acesso

ReadMultiple – leitura de várias linhas é permitida

ReadSingle – permite que apenas uma linha da tabela seja lida

WriteAppend – permite a criação de novos dados na tabela

WriteDelete – permite a exclusão de dados

WriteMerge – permite que se faça um merge com atualização dos dados

WriteReplace – permite que se faça uma atualização de troca de dados

Agora que já conhecemos um pouco sobre o acesso às entidades, vamos criar nosso aplicativo.

Adicione um novo projeto do tipo Console Application, dê o nome dele de AppWCFDataService, agora adicione uma referencia ao serviço, Add Service Reference, clique em Discover que o Visual Studio irá procurar nosso serviço dentro da solução.

wcf_p02_01

Figura 01 – adição do serviço ao projeto

 

Abra a class Program.cs, antes de utilizamos nosso serviço devemos criar duas instancias que são DataServiceContext que faz parte do namespace System.Data.Services.Client e NorthwindEntities que é no nome da classe que contem nosso mapeamento, lembra? Criamos ele em nosso primeiro post. Caso não recorde acesse o post aqui.

Listagem 02 – Classe Program

using System;
using System.Data.Services.Client;
using AppWCFDataService.WCFDataService;

namespace AppWCFDataService
{
    class Program
    {
        static void Main( string[] args )
        {
            var context = new DataServiceContext( new Uri( "http://localhost:26482/WcfDataService1.svc" ) );
            var db = new NorthwindEntities( new Uri( "http://localhost:26482/WcfDataService1.svc" ) );
        }
    }
}

Observem que informamos a mesma URI para as duas instâncias, isso porque ambas compartilham do mesmo serviço. Esta URI foi obtida executando o serviço, este é o endereço que acesso o serviço em minha maquina, atente para passar a url correta de sua maquina.

Para testar nosso aplicativo vamos criar os métodos: ListaClientes(), InserirClienteContext(Custormer customer), InserirClienteDB(Customer customer), AtualizarCliente(Customer customer) e ApagarCliente(Customer customer).

Crie os métodos conforme o código da listagem 03.

Listagem 03

/// <summary>
/// Lista todos os clientes
/// </summary>
/// <returns></returns>
static IEnumerable<Customer> ListaClientes()
{
    var result = from customers in _db.Customers select customers;
    return result.ToList();
}

/// <summary>
/// Insere um novo cliente
/// Utiliza o context para inserir o objeto
/// </summary>
/// <param name="customer"></param>
static void InserirClienteContext(Customer customer)
{
    _context.AddObject("Customers", customer);
    _context.SaveChanges();
}

/// <summary>
/// Insere um novo cliente
/// Utiliza o mapeamento para inserir o objeto
/// </summary>
/// <param name="customer"></param>
static void InserirClienteDB( Customer customer )
{
    _db.AddToCustomers(customer);
    _db.SaveChanges();
}

/// <summary>
/// Atualiza um cliente
/// </summary>
/// <param name="customer"></param>
static void AtualizarCliente( Customer customer )
{
    var customerToUpdate = (from cus in _db.Customers where cus.CustomerID == customer.CustomerID select cus).First();
    customerToUpdate.CompanyName = customer.CompanyName;
    
    _db.UpdateObject( customerToUpdate );
    _db.SaveChanges();
}

/// <summary>
/// Exclui um cliente
/// </summary>
/// <param name="customer"></param>
static void ApagarCliente( Customer customer )
{
    var customerToDelete = ( from cus in _db.Customers where cus.CustomerID == customer.CustomerID select cus ).First();

    _db.DeleteObject( customerToDelete );
    _db.SaveChanges();
}

Agora só precisamos criar um cliente e testar nossos métodos. O código da listagem 04 mostra como isso pode ser feito.

Listagem 04

static DataServiceContext _context = new DataServiceContext( new Uri( "http://localhost:26482/WcfDataService1.svc" ) );
static NorthwindEntities _db = new NorthwindEntities( new Uri( "http://localhost:26482/WcfDataService1.svc" ) );

    static void Main( string[] args )
    {
        //
        // Lista os clientes
        //
        foreach (Customer customer in ListaClientes())
        {
            Console.WriteLine(customer.ContactName + " - " + customer.Country);
        }

        //
        // Cliente a ser inserido
        //
        var newCustomer = new Customer
                           {
                                CustomerID = "LUCLI",
                                Address = "Rua Teste",
                                City = "Belo Horizonte",
                                CompanyName = "Tabajara S/A",
                                ContactName = "Luciano Lima",
                                ContactTitle = "Sr",
                                Country = "Brasil",
                                Fax = "31 1234-5678",
                                Phone = "31 1234-5678",
                                PostalCode = "12330-123",
                                Region = "MG"
                           };

            //Inserir - Context
            InserirClienteContext(newCustomer);

            //Inserir - Entity
            InserirClienteDB(newCustomer);

            //Atualizar
            AtualizarCliente(newCustomer);

            //Excluir
            ApagarCliente(newCustomer);

            Console.ReadLine();
    }

 

Bem pessoal, vimos aqui como o trabalho com serviços está ficando cada vez mais fácil, como viram com pouco código conseguimos montar um serviço e criar uma aplicação simples para consumí-lo.