O WCF Data Services ou Windows Communication Foundation Data Services (originalmente conhecido como ADO .NET Data Services) é um framework que pode ser usado para expor uma camada de dados via interface REST usando JSON ou Atom como formato de saída.
Por ser uma tecnologia nova, alguns termos usados podem gerar dúvidas para quem está iniciando o aprendizado, por isso, possuir conceitos sobre web services , WCF e ADO .NET Data Services vai ajudar muito no entendimento dos recursos apresentados neste artigo. Sugestão: vejas as referências no final do artigo.
O WCF Data Services permite a criação e o consumo de serviços de dados para Web ou para Intranet através da utilização do protocolo Open Data (OData). O protocolo OData permite que você exponha a sua fonte de dados como um recurso que é endereçável via URI. Isso permite o acesso e a alteração de dados através da semântica REST – Representation State Transfer, mais especificamente os comandos HTTP padrão: GET, PUT, POST e DELETE.
O Open Data Protocol (OData) é um protocolo para consulta e para atualização de dados na web, sendo um conjunto de extensões para o protocolo AtomPub.
O AtomPub é um protocolo baseado em HTTP usado para o mesmo fim, criar e atualizar os recursos da web, trabalhando em conjunto com o Atom Syndication Format, uma linguagem baseada em XML, usado para a web feeds.
OData anteriormente era conhecido como Protocolo Astoria Protocol, protocolo ADO.NET Data Services ou como um conjunto de convenções/extensões para AtomPub.
Obs: o Google usa o protocolo Gdata.
A seguir, temos o diagrama que ilustra a arquitetura dos WCF Data Services para a exposição feeds OData:

Podemos usar o WCF Data Services para expor qualquer fonte de dados com suporte a consultas LINQ, ou seja, que implementem IQueryable/IUpdatable. Através de uma interface RESTful, a aplicação pede um endereço para o serviço, e o endereço é traduzido como uma consulta LINQ que retorna os dados desejados.
Pensando dessa forma, temos as seguintes possibilidades:
* Permitir que aplicações AJAX acessem banco de dados via HTTP sem ter que escrever um Web Service como um proxy;
* Criar um sistema de acesso a dados RESTful;
* Expor um modelo de entidades via URI;
* Ser consumido por clientes distintos como: Windows, Web, Console, Ajax e SilverLight.
O WCF Data Services cria de forma automática um Web Service REST-ful que gera uma saída baseada em JSON ou Atom em um configuração fornecida. Dessa forma, o desenvolvedor não está obrigado a criar o Web Service, serializar os dados para JSON ou Atom, tendo assim uma aumento de desempenho no desenvolvimento da aplicação.
Da Teoria à Prática
Creio que um exemplo prático simples vai ajudar a esclarecer melhor os conceitos sobre o WCF Data Services.
No exemplo deste artigo, vamos usar o WCF Data Services para expor uma camada de dados gerada pelo Entity Framework e realizar consultas nos dados via URI sem ter que escrever nenhum método para isso. Confira…
Para atingir nosso objetivo, vamos seguir as seguintes etapas:
1. Criar uma aplicação ASP.NET Web;
2. Definir um modelo de dados usando o Entity Data Model a partir do banco de dados Northwind;
3. Incluir um serviço de dados na aplicação Web;
4. Permitir o acesso ao serviço de dados;
5. Realizar consultas no serviço de dados via URI.
Eu estou usando o Visual Web Developer 2010 Express Edition como ferramenta para criar os projetos e os serviços deste artigo.
1-) Abra o VWD 2010 Express e, no menu File, selecione New Project.
A seguir, selecione o template ASP .NET Web Application e informe o nome Web_Demo_WCF_DS e clique em OK.

2-) A seguir, no menu Project, selecione Add New Item.
3-) Na janela Add New Item, em Templates, selecione ADO .NET Entity Data Model, informe o nome Northwind.edmx e clique em Add.
4-) Seguindo o assistente selecione o item: Generate From DataBase e clique em Next>.
5-) Na próxima janela do assistente, selecione a conexão com o banco de dados Northwind.mdf, aceite o nome NorthwindEntities e clique em Next>.

6-) Na próxima janela, selecione as tabelas: Categories, Customers, Order, Order Details e Products; aceite o nome para Model Namespace como NorthwindModel, e clique no botão Finish.

Abaixo, temos o modelo conceitual representado graficamente no descritor do EF. Além disso, foi gerado o ObjectContext que gerencia o estado dos objetos e permite realizar operações CRUD:

Vamos agora criar no serviço de dados. No menu Project, selecione Add New Item e, a seguir, selecione o template WCF Data Service, informe o nome Wcf_Northwind_DS.svc e clique em Add.

Dessa forma, temos o nosso serviço de dados do tipo WCF Data Service criado.
Até o momento, temos o modelo de entidades gerado e o serviço de dados criado. Precisamos informar ao serviço de dados qual o contexto que estamos usando e o que ele vai poder disponibilizar.
Para isso, abra o arquivo do serviço criado e, no lugar de [[class name]], informe o nome do nosso modelo de entidades: NorthwindEntities criado pelo Entity Framework.

Descomente também a linha de código:
config.SetEntitySetAccessRule("MyEntitySet", EntitySetRights.All)Substituindo a palavra MyEntitySet por um asterísco (*);
config.SetEntitySetAccessRule("MyEntityset", EntitySetRights.AllRead) ==> config.SetEntitySetAccessRule("*", EntitySetRights.All)Na figura abaixo, temos como deve ficar o código após essas alterações:

Com essas alterações, informamos ao nosso serviço de dados qual é a classe que contém o mapeamento para as nossas entidades, no caso NorthwindEntities; e também definimos que não haverá restrição a nenhuma entidade: “EntitySetRights.All”.
Executando o projeto, iremos obter a seguinte página referente ao nosso serviço de dados:

Observe que o nosso serviço de dados WCF listou todas as nossas entidades: Categories, Customers, Order_Details, Orders, Products.
Lembra que dissemos que uma característica de um serviço WCF é aceitar consultas via URI?
Pois é isso que vamos fazer…
Para ver todos os Clientes, digite a seguinte URI: http://localhost:7410/Wcf_Northwind_DS.svc/Customers
O resultado exibido será o seguinte:

Para melhor visualizarmos o resultado, vamos desativar o modo de exibição de Feeds do navegador Internet Explorer.
Selecione: Ferramentas -> Opções da Internet e, na janela Opções da Internet, abra a aba Conteúdo e clique em Configurações para Feeds e Web Services.
Em seguida, desmarque a opção: Ativar o modo de exibição de leitura de feed, conforme mostra a figura abaixo:


Após isso, clique em OK até confirmar as alterações e, refazendo a execução da URL, iremos obter a relação dos Clientes no formato XML, conforme a figura abaixo:

Observe que cada cliente possui uma referência única que, no caso, refere-se à chave primária da tabela Customers. Para visualizar um cliente particular, basta usar esta referência na URI digitando: http://localhost:7410/Wcf_Northwind_DS.svc/Customers(‘ALFKI’)
O resultado é mostrado a seguir:

Deseja ver os pedidos deste cliente?
Então digite: http://localhost:7410/Wcf_Northwind_DS.svc/Customers(‘ALFKI’)/Orders
E veja o resultado:

Vamos agora exibir os valores para a entidade categories, mais especificamente para a primeira categoria.
Digite a URI: http://localhost:7410/Wcf_Northwind_DS.svc/Categories(1)
Iremos obter o seguinte resultado:

Se desejarmos exibir a figura que está no formato binário no campo Picture, basta digitar:
http://localhost:7410/Wcf_Northwind_DS.svc/Categories(1)/Picture/$value
Deseja filtrar os clientes por cidade?
Vamos exibir somente os clientes de Londres. Para isso, digite:
http://localhost:7410/Wcf_Northwind_DS.svc/Customers?$filter=City eq ‘London’
O resultado será:

Eu poderia continuar, mas creio que você já percebeu todo o poder das consultas dos serviços de dados WCF.
Operações suportada por um WCF Data Service:
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
value – exibe um valor
Operadores suportados:
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
Além de permitir realizar consultas via URI, o WCF Data Services permite também que você consulte um serviço de dados a partir de uma aplicação cliente baseada no .NET Framework usando as classes geradas pelo serviço de dados. Você pode executar essas consultas usando os seguintes métodos:
1. Executando uma consulta LINQ contra o DataServiceQuery que você obtém a partir do DataServiceContext que a ferramenta Add Data Service Reference gera;
2. De forma implícita, pela enumeração sobre o DataServiceQuery que você obtém a partir do DataServiceContext que a ferramenta Add Data Service Reference gera;
3. Explicitamente, chamando o método Execute no DataServiceQuery ou o método BeginExecute para execução assíncrona;
Obs1 : Um DataServiceQuery representa uma simples requisição de consulta a um serviço de dados (data service).
Obs2 : Um DataServiceContext representa um contexto em tempo de execução de um serviço de dados (data service).
No exemplo a seguir, temos um trecho de código que mostra como usar um DataServiceContext para explicitamente executar uma consulta que retorna todos os clientes (customers) de um serviço de dados gerado para o banco de dados Northwind:
' Define uma requisição URI que retorna os clientes<br />Dim customersUri = New Uri(svcUri, "Northwind.svc/Customers")' Cria um DataServiceContext usando o serviço URI.<br />Dim context = New DataServiceContext(svcUri)Try<br /> ' Percorre o resutlado da consulta<br /> For Each customer As Customer In context.Execute(Of Customer)(customersUri)<br /> Console.WriteLine("Nome do Cliente: {0}", customer.CompanyName)<br /> Next<br />Catch ex As DataServiceQueryException<br /> Throw New ApplicationException("Ocorreu um erro durante a execução da consutla.", ex)<br />End TryEste é apenas um exemplo de como usar os recursos do serviços de dados, aguarde em outro artigo onde eu mostrarei como efetivamente consumir os WCF Data Services.
Até o próximo artigo WCF Data Services…
Pegue o projeto completo aqui:
* WCF – Introdução
* ADO .NET Data Services
* Usando ADO .NET Data Services
* Introdução ao ADO .NET Data Service
* Windows Communication Foundation (WCF) Data Services
* http://www.odata.org/developers/protocols








