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”.
Figura 01 – inclusão de novo item
Figura 02 – item do tipo WCF Data Service
Seu projeto deverá estar como na figura 03.
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.
Figura 04 – inclusão do entity data model
Figura 05 – Seleção do tipo de Modelo
Figura 06 – String de conexão e Context
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.
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!!