Desenvolvimento - Web Services

Silverlight 2: Trabalhando com Web Services

Este artigo descreve como pode ser melhorada a comunicação e manipulação dos dados com a interface Silverlight, utilizando Web Services.

por Rodrigo Kono



Já é de conhecimento geral que é possível criar aplicações de negócio envolvendo dados com o Silverlight. Porém, alguns desenvolvedores possuem dificuldades em trabalhar com este recurso. Mesmo o Silverlight possuindo seus controles e objetos com suporte a XML/Web Services e com o poder de consumir dados, isto é apenas um conceito básico para melhores soluções e resultados.

Em boa parte dos casos, a boa dica é utilizar uma camada de Web Services, onde pode ser implementado o acesso a dados através de objetos personalizados, LINQ to SQL, Entity Framework, ADO.NET Data Services, entre outros que por fim expõe objetos de dados através desse Web Service, que torna-se um canal estratégico de acesso a dados nas aplicações RIA. Esta arquitetura é representada visualmente na figura 01.


Figura 01 – Arquitetura do serviço de acesso a dados em aplicações RIA

Nesse artigo irei explanar como podemos melhorar essa comunicação com a interface utilizando Web Services. Vamos ao trabalho!

No Visual Studio 2008, crie um novo projeto do tipo Silverlight Application como mostra a figura 02.


Figura 02 – Criando novo projeto Silverlight

Com o projeto criado, é hora de criarmos nosso Web Service neste mesmo projeto. Para isso vá na Solution Explorer, clique com o botão direito no nome do Web Site e selecione o menu “Add > New Item”.

Irá abrir uma janela, conforme mostra a figura 03. Escolha “Silverlight-enabled WCF Service” (que é o serviço WCF que dá suporte ao Silverlight), dê um nome (nesse caso usamos servico.svc) e clique no botão “Add”.


Figura 03 – Adicionando um serviço WCF ao projeto.

Por padrão, na classe do serviço recém criada, já vem uma função com o nome deDoWork(). Vamos criar mais uma função para retornar uma string conforme mostra a listagem 01. Lembrando que se pode trabalhar essa função de várias formas, como para retornar números, vetores binários, datasets, etc. Porém, no intuito de aprendizado, o retorno de string é o essencial.

public class servico

{

[OperationContract]

public void DoWork()

{

// Add your operation implementation here

return;

}

[OperationContract]

public string OlaPessoal()

{

return "Olá Pessoal!";

}

// Add more operations here and mark them with [OperationContract]

}
Listagem 01 – Criando função no serviço WCF que retorna string

Em seguida compile o seu projeto (CTRL + SHIFT + B) para gerar os assemblies e garantir a ligação por referência. Feito isso, o Web Service está pronto para ser utilizado.

Agora no projeto Silverlight vamos referenciar o nosso Web Service criado. Para isso clique com o botão direito no nome do projeto e seleciona “Add Service Reference” conforme mostra a figura 04.


Figura 04 – Selecionando a referência no menu

A janela de referência ao serviço será aberta. Nesse caso, como nosso Web Service está na mesma Solution, clique em “Discover”, conforme mostra a seta da figura 05, adicione um nome para a namespace e clique em Ok.


Figura 05 – Adicionando referência ao Web Service WCF criado.

Na sua Solution Explorer, a visualização dos projetos Web e Silverlight será como mostra a figura 06.


Figura 06 – Projeto Web com o Web Service criado e o projeto Silverlight com o Web Service referenciado.

No arquivo Page.xaml iremos criar um botão e um textbox para invocar e mostrar o resultado da chamada do Web Services na aplicação Silverlight. Veja o XAML na listagem 02.

Dica: Na função Click do botão, crie o handle do evento para que seja criada a função automaticamente no seu código gerenciado.

<Canvas>

<StackPanel>

<Button x:Name="btnOK" Width="200" Height="30" Content="Diga Olá" Click="btnOK_Click"></Button>

<TextBox x:Name="txtOK" Width="200" Height="30" Margin="0 10 0 0"></TextBox>

</StackPanel>

</Canvas>
Listagem 02 – XAML criado para chamar e renderizar o resultado do Web Service

No código gerenciado, nesse caso usando C#, repare que a função btnOk_Click está criada. Antes de trabalharmos nela, vamos criar outra função chamada “cliente_OlaPessoalCompleto” conforme mostra a listagem 03 Essa será a função que irá disparar o resultado do Web Service para o objeto da aplicação Silverlight.

private void cliente_OlaPessoalCompleto(object sender, SilverlightWS.ServiceReference1.OlaPessoalCompletedEventArgs e)

{

txtOK.Text = string.Format("Saída do WCF: {0}", e.Result.ToString());

}

Listagem 03 – Função criada para disparar resultado do Web Service para a aplicação Silverlight

Na função btnOk_Click vamos instanciar o web service utilizando o método client do serviço. Com a variável instanciada passe a função que acabamos de criar como argumento. Por fim use o método async do serviço, conforme é mostrado na listagem 04, para que seja feita a comunicação.

private void btnOK_Click(object sender, RoutedEventArgs e)

{

ServiceReference1.servicoClient cliente = new SilverlightWS.ServiceReference1.servicoClient();

cliente.OlaPessoalCompleted += new EventHandler<SilverlightWS.ServiceReference1.OlaPessoalCompletedEventArgs>(cliente_OlaPessoalCompleto);

cliente.OlaPessoalAsync();

}

Listagem 04 – instância do web service na função Click.

Pronto!
Agora compile, rode a aplicação e teste. O resultado será mostrado como na figura 07.
Obs.: Verifique se o projeto Web está como StartUp Project.


Figura 07 – Aplicação Silverlight utilizando dados de um Web Service


Por fim, alguns ainda devem se perguntar: Qual a diferença entre um WCF Web Service com um Web Service ASMX? A resposta é que com o WCF Web Service temos uma flexibilidade maior para manipulação dos dados, principalmente para interfaces como o Silverlight, que é o mais recomendado. Porém tudo que fazemos com Web Services ASMX, podemos fazer com o Web Services WCF também.

Conclusão

Utilizando Web Services é possível minimizar o trabalho e melhorar a manipulação de dados em aplicações Silverlight. Um excelente recurso para isso é a utilização do WCF.

Referências:

· MSDN Data Development - http://msdn.microsoft.com/data

· MSDN Windows Communication Foundation - http://msdn.microsoft.com/en-us/library/ms735119.aspx

· Site official do Silverlight - http://silverlight.net

Espero que esse artigo lhe ajude e seja útil em seus projetos.

Para ficar por dentro das novidades do ASP.NET e Silverlight não deixe de visitar meu blog (Visão Widescreen – http://kono.spaces.live.com)

Rodrigo Kono
MVP – ASP.NET

Rodrigo Kono

Rodrigo Kono - Trabalha com programação para web a 8 anos, é MVP da Microsoft em ASP.NET, MSP Mentor, MCP.NET 2.0, MCTS [WEB / SQL], líder do grupo de usuários DevGoiás .NET (www.devgoias.net), bacharel em Ciência da Computação, Mestrando na Faculdade de Engenharia Elétrica da UFG, desenvolve serviços na Secretaria da Fazenda do Estado de Goiás, é palestrante e membro do board da INETA Brasil, escreve e produz vídeos para o site Linha de Código, realizou o 1º treinamento de VB.NET 2.0 (windows forms) e ASP.NET 2.0 de Goiás. Já esteve palestrando em várias cidades do país, entre elas Campo Grande, Goiânia, São Paulo, Porto Alegre, Porto Velho e Curitiba, totalizando mais de 8500 pessoas nos últimos cinco anos. Trabalha a um bom tempo para disseminação e divulgação da plataforma .NET com treinamentos, reuniões e palestras. O seu trabalho pode ser acompanhado em seu blog: http://kono.spaces.live.com.