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 KonoJá é 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
- Verificando disponibilidade de um serviço WCF ou WebServiceC#
- Criando um WebService com ASP.NET Razor e WebMatrixWeb Services
- Construindo um List Suggest com ASP.NET Web Services e JQueryASP. NET
- Consumindo serviços REST com HttpClientWeb Services
- REST e o WSDLWeb Services