Desenvolvimento - Silverlight
Estratégia de Acesso a Dados para Silverlight
Um pequeno resumo sobre as principais tecnologias envolvidas para acesso a dados com Silverlight.
por Gustavo MalheirosMuitas aplicações, principalmente as Aplicações de Negócios, precisam fazer bastante acesso a banco de dados. Em Aplicações Silverlight essa forma muda bastante em relação às aplicações Windows Forms e Aplicações Web. Isso é devido à estrutura do Silverlight, que roda sempre num browser e conseqüentemente desconectado do servidor remoto.
Existem 2 pontos que acho importante deixar esclarecido:
- O Silverlight não dá suporte ao ADO.net tradicional, portanto não é possível trabalhar com essas classes (DataSet, DataTable, DataReader, etc) no client. Dessa forma é de costume acessar dados na forma de lista ou coleções de objetos.
- Só se consegue acessar dados de forma assíncrona, ou seja, é como se a solicitação de uma consulta ou update no banco sempre fosse em duas etapas. Primeiro faz um envio do comando, depois faz uma consulta para pegar o resultado.
Desse modo, para se fazer acesso a dados, é interessante ter uma camada de serviços.
Antes de mostrar as diferentes formas de consumir dados com Silverlight, vamos falar um pouco do WCF (Windows Comunication Foundation). O WCF foi introduzido com o .NET 3.0 e hoje é a melhor opção para criar e consumir serviços para aplicações distribuídas na plataforma Microsoft. Ele substitui as tecnologias anteriores como ASMX, .NET Remoting, MSMQ, DCOM, etc. Antes você precisava conhecer cada uma dessas tecnologias para saber aplicar a melhor opção na sua aplicação distribuída. Com o WCF agora fica mais fácil pois está tudo unificado numa mesma tecnologia. Com ele é possível criar serviços ASMX Web Services, WCF Services e RESTfull services baseados em XML e JSON.
Existem várias formas de consumir dados com Silverlight e a mais comum é via Web Services. Vamos mostrar aqui algumas tecnologias relacionadas para isso:
o ASMX Web Services
· Baseada em SOAP, sem dúvida é a mais utilizada até hoje, como nos projetos da NF-e. Somente era possível criar este tipo até o .NET 2.0.
o WCF Web Services
· Baseados em SOAP
Você pode criar tanto serviços ASMX ou WCF baseados no protocolo SOAP. Isso significa que eles podem expor sua descrição através do WSDL (Web Services Description Language), ou seja, através dessa descrição você pode adicionar uma referência ao serviço no seu projeto. Para o Silverlight, no Visual Studio se usa um template apropriado "Silverlight-enabled WCF Service". Veja alguns exemplos :
Rodrigo Kono: http://www.linhadecodigo.com.br/Artigo.aspx?id=2026
Clovis Coli Jr. : http://www.devgoias.net/artigo_ler.aspx?ID=56
· RESTful Services
Serviços REST (REpresentational State Transfer) são baseados em HTTP e podem ser criados facilmente com o WCF, onde se define alguns parâmetros, entre eles o formato de resposta, que pode ser XML ou JSON. Para consumir, você não pode adicionar uma referência no seu projeto porque esse tipo de serviço não expõe um contrato ou seu WSDL. É preciso fazer uso das classes WebClient e HttpWebRequest para comunicar com esses serviços. Uma vez que foi invocado o serviço no client Silverlight, você precisa consumir o resultado para apresentar ao usuário num controle (ex. datagrid). A melhor pedida neste caso é usar o LINQ to XML ou LINQ to JSON. Alguns exemplos de serviços desse tipo são do Amazon, Digg, Flickr e Twitter. Veja um pouco mais a fundo neste artigo do Israel Aece e depois veja também um exemplo de retorno em XML do Twitter:
o RSS - Syndication Feeds
Também pode ser considerado como Web Service, uma vez que vários sites na internet publicam seu conteúdo nos formatos RSS e Atom, disponíveis para serem consumidos com uma URI única que retorna dados em XML. Também podem ser invocados usando as classes WebClient e HttpWebRequest. O conteúdo pode ser lido e manipulado usando XmlReader, LINQ to XML ou a classe SyndicationFeed.
o ADO.Net Data Services
Também fornece Web Service no estilo RESTful, porém as vantagens são bem consideráveis se comparado com a forma tradicional, pois provê uma forma bem mais fácil de acesso, eliminando a necessidade de colocar uma URI HTTP e executá-la manualmente com WebClient e HttpWebRequest. É interessante que, se você possui na sua arquitetura um modelo de entidades (do Entity Framework por exemplo), ele pode ser exposto para o client através de URIs, usando a biblioteca System.DataServices.Client. Para entender melhor, veja esta série de artigos do Marcelo Paiva: ADO.Net Data Services - Parte 1 - Parte 2 - Parte 3 - Parte 4
o RIA Services
Este era o principal ponto onde gostaria de chegar, pois, atualmente é a mais nova e melhor opção de acesso a dados para Silverlight. Tanto o ADO.Net Data Services quanto o RIA Services, agora fazem parte da família WCF também e já estão disponíveis na versão beta do Visual Studio 2010, que será lançado em abril deste ano. O RIA Services é um conjunto de framework, ferramentas e serviços que foca na complexidade de construir aplicações em N-Camadas, tornando fácil de usar na camada de apresentação. Ele permite fazer um link entre as camadas de apresentação(client silverlight) e a camada do meio (mid tier) em ASP.net, como se fosse uma única solução através de geração automática de código no projeto da camada cliente. Além disso, provê outros recursos, como autenticação, validação e gerenciamento de propriedades. Veja na figura abaixo como ele atua na lógica da aplicação.
Fig.01 - Versão simplificada de uma aplicação N-Camadas. O RIA Services foca na caixa entre a View e a Data Access Layer (DAL)
Bom, mas isso é assunto que vou abordar mais afundo no próximo artigo .
Até a próxima!!
- Acessando imagens externa (não compiladas) dentro do mesmo domínioSilverlight
- Trabalhando com enumeradosSilverlight
- Comunicação Local no SilverlightSilverlight
- Gerando Gráficos com Silverlight, WCF e LINQSilverlight
- Usando o Scroll do mouse para dar Zoom em Imagens com Silverlight 4Silverlight