WCF Data Services: trabalhando com serviços HTTP/RESTful

Olá pessoal, tudo certo?

Se você acompanhou as várias discussões sobre ADO.NET Data Services, deve se lembrar que ele oferecia um mecanismo de exportação de dados através de interfaces RESTful.

Para uma aplicação Silverlight Business Application do RIA Services Beta 2 no Visual Studio 2008 SP1, por exemplo, podemos adicionar um novo serviço ADO.NET Data Service para dados de uma fonte.

Veja o template escolhido para o projeto RIA Services Beta for Visual Studio 2008 SP1:

image

Na sequência, veja o template para um serviço ADO.NET Data Services ainda no Visual Studio 2008 SP1:

image

Quando adicionamos o template, o código colocado no projeto segue abaixo:

    1: using System;
    2: using System.Collections.Generic;
    3: using System.Data.Services;
    4: using System.Linq;
    5: using System.ServiceModel.Web;
    6: using System.Web;
    7:  
    8: namespace BusinessApplication2.Web
    9: {
   10:     public class WebDataService1 : DataService< /* TODO: put your data source class name here */ >
   11:     {
   12:         // This method is called only once to initialize service-wide policies.
   13:         public static void InitializeService(IDataServiceConfiguration config)
   14:         {
   15:             // TODO: set rules to indicate which entity sets and service operations are visible, updatable, etc.
   16:             // Examples:
   17:             // config.SetEntitySetAccessRule("MyEntityset", EntitySetRights.AllRead);
   18:             // config.SetServiceOperationAccessRule("MyServiceOperation", ServiceOperationRights.All);
   19:         }
   20:     }
   21: }

Durante o PDC09, foi anunciado a mudança de ADO.NET DATA SERVICES para WCF DATA SERVICES. Faz sentido, uma vez que o que está por trás deste mecanismo de entrega é um serviço WCF (como vemos na extensão .SVC) do arquivo acima.

Agora no Visual Studio 2010 RC, veja o mesmo template com seu novo nome, na pasta Web:

image

O novo código inserido no projeto pelo template é dado abaixo:

    1: using System;
    2: using System.Collections.Generic;
    3: using System.Data.Services;
    4: using System.Data.Services.Common;
    5: using System.Linq;
    6: using System.ServiceModel.Web;
    7: using System.Web;
    8:  
    9: namespace WebRole1
   10: {
   11:     public class WcfDataService1 : DataService< /* TODO: put your data source class name here */ >
   12:     {
   13:         // This method is called only once to initialize service-wide policies.
   14:         public static void InitializeService(IDataServiceConfiguration config)
   15:         {
   16:             // TODO: set rules to indicate which entity sets and service operations are visible, updatable, etc.
   17:             // Examples:
   18:             // config.SetEntitySetAccessRule("MyEntityset", EntitySetRights.AllRead);
   19:             // config.SetServiceOperationAccessRule("MyServiceOperation", ServiceOperationRights.All);
   20:             
   21:         }
   22:     }
   23: }

Além da adição do novo namespace “System.Data.Services.Common”, algumas mundanças mais que devem merecer um post no futuro.

De fato, a família WCF aumentou, ganhando novos componentes. A figura abaixo ilustra essa nova organização de pacotes, frameworks, serviços e modelos de programação para o WCF, veja:

image

Note: não são mudanças no WCF, mas apenas a adição de novos serviços e recursos que aproveitam os benefícios do modelo de serviços da plataforma .NET, que serão consolidadas no .NET 4.0 e em pacotes futuros.

Em breve, vamos falar mais sobre alguns dos frameworks acima. Por enquanto, recomendo conferir os seguintes links:

MSDN: WCF RIA Services
Ref.: https://msdn.microsoft.com/en-us/library/ee707344(VS.91).aspx

MSDN: WCF Data Services
Ref.: https://msdn.microsoft.com/en-us/library/cc668792(VS.100).aspx

Data Developer Center: WCF Data Services
Ref.: https://msdn.microsoft.com/en-us/data/bb931106.aspx

WCF Data Services and OData At-a-Glance
Ref.: https://msdn.microsoft.com/en-us/data/aa937697.aspx

Por enquanto é só!Até o próximo post :)

Waldemir.