Antes de iniciarmos com WCF Data Service vamos dar uma passada rápida no conceito de Web Service e WCF para que possamos entender melhor o WCF Data Service.

Web Service é uma solução utilizada na integração de sistemas e na comunicação entre aplicações diferentes. Com esta tecnologia é possível que novas aplicações possam interagir com aquelas que já existem e que sistemas desenvolvidos em plataformas diferentes sejam compatíveis. Os Web services são componentes que permitem às aplicações enviar e receber dados em formato XML. Cada aplicação pode ter a sua própria "linguagem", que é traduzida para uma linguagem universal, o formato XML.

Essencialmente, o Web Service faz com que os recursos da aplicação do software estejam disponíveis sobre a rede de uma forma normalizada. Outras tecnologias fazem a mesma coisa, como por exemplo, os browsers da Internet acedem às páginas Web disponíveis usando por norma as tecnologias da Internet, HTTP e HTML. No entanto, estas tecnologias não são bem sucedidas na comunicação e integração de aplicações. Existe uma grande motivação sobre a tecnologia Web Service pois possibilita que diferentes aplicações comuniquem entre si e utilizem recursos diferentes.

Utilizando a tecnologia Web Service, uma aplicação pode invocar outra para efetuar tarefas simples ou complexas mesmo que as duas aplicações estejam em diferentes sistemas e escritas em linguagens diferentes. Em outras palavras, os Web Services fazem com que os seus recursos estejam disponíveis para que qualquer aplicação cliente possa operar e extrair os recursos fornecidos pelo Web Service.

Windows Communication Foundation (WCF) é um modelo de programação unificado e ambiente de execução (Framework) criado pela Microsoft que visam a construção de aplicações orientadas a serviços (Service Oriented Architecture).

O objetivo principal do WCF é permitir que analistas e desenvolvedores criem aplicações voltadas para computação distribuída.

O WCF possui ainda um conjunto de bibliotecas (classes) que permitem aos desenvolvedores criar estas aplicações para funcionarem sob o sistema operacional Windows. Ele é, na verdade,  uma evolução ao Web Service, isso porque ele agrupa várias tecnologias para resolver o problema na comunicação dos dados.

WCF Data Services é uma forma de expormos um modelo de dados do Entity Framework através de uma interface REST. O DS é uma extensão do WCF (isto é, pode ser hospedado como qualquer serviço WCF). É uma tecnologia que visa facilitar o acesso a dados tanto de aplicações Web comuns como AJAX, como Silverlight e .NET.

Para expor os dados via WCF Data Services, é preciso que se tenha uma fonte de dados que suporte consultas utilizando LINQ, isto é, que implemente IQueryable/IUpdatable. Resumidamente, a aplicação pede um endereço para o serviço, e este endereço é traduzido como uma consulta LINQ para que então, o provedor de dados retorne os dados de interesse.

Parece meio confuso mas na verdade o WCF Data Service nos dá as seguintes possibilidades:

  • fornece uma API que nos permite criar e consumir dados através de HTTP utilizando serviços RESTful. 
  • suporta todas as operações de banco de dados através de URI. 
  • é capaz de expor um Modelo de Entidade através de uma URI. 
  • suporta CRUD. 
  • pode ser consumido por qualquer aplicação em diferentes tipos de clientes como Windows, SilverLight, Web, AJAX e Console.

Mas vamos deixar de conversa e vermos na prática como isso funciona!

Crie um projeto do tipo Asp .Net Web Application, dê o nome de “WebAppWCFDataService”.

Feito isso, precisamos adicionar nosso WCF Data Service, para isto, clique com o botão direito na solução e adicione um item do tipo “WCF Data Service”.

wcfdata01

Figura 01 – inclusão de novo item

 

wcfdata02

Figura 02 – item do tipo WCF Data Service

 

Seu projeto deverá estar como na figura 03.

wcfdata03

Figura 03 – Solução

 

Precisamos agora de nossa fonte de dados. Estou utilizando o NorthWind para este exemplo, caso não possua um banco de dados, você pode baixá-lo aqui.

Não irei entrar em detalhes de como instalar o banco pois está fora do escopo deste post.

Vamos criar nosso mapeamento relacional, para isso adicione um item do tipo ADO .Net Entity Data Model. Ele irá apresentar várias telas para que você escolha o banco, as tabelas, o nome da conexão e o contexto, basta seguir conformes as figuras 04, 05, 06 e 07.

wcfdata04

Figura 04 – inclusão do entity data model

 

wcfdata05

Figura 05 – Seleção do tipo de Modelo

 

wcfdata06

Figura 06 – String de conexão e Context

 

wcfdata07

Figura 07 – Escolha das tabelas

 

Pronto, agora que já temos nosso mapeamento precisamos informar ao data service qual é nosso contexto e o que ele deverá disponibilizar.

Abra o arquivo WcfDataService1.svc.cs, ele deve estar como o código da listagem 1

Listagem 01

using System;
using System.Collections.Generic;
using System.Data.Services;
using System.Data.Services.Common;
using System.Linq;
using System.ServiceModel.Web;
using System.Web;

namespace WebAppWCFDataSerevice
{
    public class WcfDataService1 : DataService< /* TODO: put your data source class name here */ >
    {
        // This method is called only once to initialize service-wide policies.
        public static void InitializeService(DataServiceConfiguration config)
        {
            // TODO: set rules to indicate which entity sets and service operations are visible, updatable, etc.
            // Examples:
            // config.SetEntitySetAccessRule("MyEntityset", EntitySetRights.AllRead);
            // config.SetServiceOperationAccessRule("MyServiceOperation", ServiceOperationRights.All);
            config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
        }
    }
}

Altere a linha

public class WcfDataService1 : DataService< /* TODO: put your data source class name here */ >

Para

public class WcfDataService1 : DataService<NorthwindEntities>

 

Remova as duas barras da linha

// config.SetEntitySetAccessRule("MyEntityset", EntitySetRights.AllRead);


Altere para

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


O que fizemos foi dizer ao nosso Data Service qual é a classe que contem o mapeamento para nossas entidades e definir as permissões para elas, no caso, definimos que todas as entidades não irão possuir qualquer restrição “EntitySetRights.All”

Compile o aplicativo, se tudo estiver correto ele deverá apresentar a tela como na figura 08.

wcfdata08

Figura 08 – aplicativo sendo executado


Bem, a princípio nada demais ok? Errado! Percebam que nosso serviço expos nossas entidades, assim podemos realizar pesquisas sem a necessidade de criarmos métodos para isso. Mas como isso é possível? Simples, como havia falado, o WCF Data Service nos fornece maneiras de realizarmos consultas em banco através de URI´s.

Vejam os exemplos abaixo.

Listar todos os Clientes

http://localhost:26482/WcfDataService1.svc/Customers

Listar todos os Clientes de São Paulo

http://localhost:26482/WcfDataService1.svc/Customers?$filter=Region eq ‘SP’

Listar os 10 primeiros Produtos

http://localhost:26482/WcfDataService1.svc/Products?$top=10

Mas você deve estar se perguntando. De onde você tirou estas URI´s? É simples existe uma tabela com parâmetros de pesquisa para as URI´s conforme abaixo. Não estão todos ai, mas os mais importantes.


Operações

orderby – realiza a ordenação por um parâmetro qualquer
top – seleciona a quantidade de registros informada
filter – realiza a pesquisa com base em algum filtro

 

Operadores

eq – igual
ne – não igual
gt – maior que
ge – maior ou igual
lt – menor que
le – menor ou igual
and – AND lógico
or – OR lógico
not – NOT lógico

 

Como puderam ver, o WCF Data Service é uma nova maneira de expormos nossas entidades sem a necessidade de criarmos métodos para realizar as diversas pesquisa e operações necessárias tornando assim nossa produtividade muito maior.

Num próximo post veremos como consumir nossos Data Services, além de darmos uma passada nas permissões de acesso às entidades e segurança na troca de informações.

E lembrem-se “Informação só tem sentido se for compartilhada!”

Enjoy!!