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 de DoWork(). 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