Artigo


Consumindo um Serviço WCF com Silverlight 3

29/10/2009

Desde que comecei a trabalhar com Silverlight fiquei impressionado com a beleza e a usabilidade que ele traz para uma aplicação Web, umas das grandes vantagens de se usar Silverlight é que não precisamos no preocupar com padrões estabelecidos por Browser's uma vez que ele roda em um plugin que é obtido automaticamente quando você acessa um aplicativo na web, atualmente já existe plugin para Mac e Windows e esta sendo desenvolvido para Linux, também existe um projeto para Mobile que deve ser lançado junto com a versão do Windows Mobile 6.5.

Neste artigo estou utilizando:

Visual Studio 2008
msdn.microsoft.com/en-us/vstudio/aa700831.aspx

Expression Blend 3 
www.microsoft.com/downloads/details.aspx

Microsoft® Silverlight™ 3 SDK 
www.microsoft.com/downloadS/details.aspx

Microsoft® Silverlight™ 3 Tools for Visual Studio 2008 SP1
www.microsoft.com/downloadS/details.aspx

Após a instalação dos aplicativos acima nosso primeiro passo é criar o serviço WCF.

Dentre as diversas formas de hospedar um serviço WCF nós vamos hospedar no IIS criando um novo projeto chamado WCFSilverlight.Servico do tipo Service Application.

Vá em File -> New -> Projetct -> Visual C# -> Web -> WFC Service Application Coloque o nome da aplicação WCFSilverlight.Servico e o nome da Solução WCFSilverlight e clique em OK.

 

Apague os arquivos templates “IService1”, “Service1.svc” e “Service1.cs” que foram criados pelo Visual Studio.

Clique com o botão direito em cima do projeto no Solution  Explorer e vá em Add -> New Item, selecione WCF Service e dê o nome de UsuarioService.

 

 

Edite o arquivo IUsuarioService.cs e o codifique da seguinte forma.

using System.Runtime.Serialization;
using
System.ServiceModel;
namespace WCFSilverlight.Servico
{
    [
ServiceContract]
   
public interface IUsuarioService
   
{
        [
OperationContract]
       
Usuario Autenticar(string login, string senha);
    }

    [
DataContract]
    public
class Usuario
   
{
        [
DataMember]
       
public string Login { get; set; }
       
        [
DataMember]
       
public string Senha { get; set; }
    }
}

Edite o arquivo UsuarioService.svc.cs e codifique da seguinte forma. (Neste momento estamos fazendo uma validação que podeira ser feita acessando dados em um banco)

namespace WCFSilverlight.Servico
{
   
public class UsuarioService : IUsuarioService
   
{
       
public Usuario Autenticar(string login, string senha)
        {
           
//Aqui você Acessa o banco para validar as informações
           
if (login.Equals("admin") && senha.Equals("admin"))
            {
               
return new Usuario
                                   
{
                                        Login = login,
                                        Senha = senha
                                    };
             }
            
return null;
      }
    }
}

Abra o arquivo de configuração e certifique que o binding do endpoint do servico é basicHttpBinding.

<endpoint address="" binding="basicHttpBinding" contract="WCFSilverlight.Servico.IUsuarioService">

Feito isso nosso servico WCF esta pronto para ser exposto e consumido. Pressione F5 para executar o aplicativo.

 

Agora vamos ao nosso próximo passo, Criar a aplicação cliente em Silverlight.

 

Vá no menu File Add New Project, selecione “Visual C#” e “Silverlight Application” dê o nome do novo projeto de WCFSilverlight.Cliente clique em OK

Após clicar em OK Irá aparecer a seguinte janela

 

Nessa janela o Visual Studio está te perguntando se você deseja que ele rode seu aplicativo Silverlight em uma aplicação web existente ou crie uma, nos vamos utilizar a mesma aplicação para hospedar o WCF e o Silverlight, entao neste caso, selecione a opção "Host the Silverlight application in a new or existing Web site in the solution", depois selecione a opção WCFSilverlight.Service clique em OK.

 

Agora vamos criar nossa interface de login do usuário, para isso vamos utilizar o Expression Blend 3, clique com o botão direito em cima do arquivo MainPage.xaml.

Agora no Expression Blend 3 crie a interface para o usuário informar o login e a senha utilizando os controles TextBlock, TextBox, PassworkBox e Button que se encontram na ToolBar.

Dê o nomes aos compoenentes de txtLogin, txtSenha e btnOk respectivamente, dê  2 (dois) cliques sobre o botão OK para criar o Evento no codebehind.

Ou cole o código xmal a seguir no arquivo.

MainPage.xaml

<UserControl x:Class="WCFSilverlight.Cliente.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" |
xmlns
:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" Height="396" Width="542" Background="Black">
<
Grid x:Name="LayoutRoot" Background="White">
<
TextBlock HorizontalAlignment="Left" Margin="197,138,0,0" VerticalAlignment="Top" Text="Login" TextWrapping="Wrap"/>
<
TextBox Name="txtLogin" VerticalAlignment="Top" TextWrapping="Wrap" Margin="197,154,190,0"/>
<
TextBlock HorizontalAlignment="Left" Margin="197,189,0,191" Text="Senha" TextWrapping="Wrap" d:LayoutOverrides="Height"/>
<
PasswordBox Name="txtSenha" Margin="197,0,190,167" VerticalAlignment="Bottom"/>
<
Button Name="btnOk" Click="btnOk_Click" Height="26" HorizontalAlignment="Right" Margin="0,0,190,137" VerticalAlignment="Bottom" Width="81" Content="Ok"/>
Grid>
UserControl>

MainPage.xaml.cs

using System.Windows;
using System.Windows.Controls;
using WCFSilverlight.Cliente.UsuarioServiceReference;

namespace WCFSilverlight.Cliente
{

    public partial class MainPage : UserControl
   
{
   
    public MainPage()
       
{
            InitializeComponent();
        }
   
    private void btnOk_Click(object sender, RoutedEventArgs e)
       
{
   
        UsuarioServiceClient usuarioServiceClient = new UsuarioServiceClient();
           
usuarioServiceClient.AutenticarCompleted +=
                (sender1, e1) =>
                {
                   
Usuario usuarioLogado = e1.Result;
                   
if (usuarioLogado != null)
                       
MessageBox.Show("Usuario autenticado com sucesso: " + usuarioLogado.Login);
                   
else
                       
MessageBox.Show("Usuario ou senha inválidos");
               
};
            usuarioServiceClient.AutenticarAsync(txtLogin.Text, txtSenha.Password);
        }
    }
}

Salve as Alterações e feche o Expression Blend 3.

Execute a aplicação no Visual Studio e copie o endereço do serviço para criar o service referente no projeto Silverlight.

No Solution Explorer clique com o botão direto no projeto Silverlight e sobre a opção "Add Service Reference" cole o endereço do serviço e clique sobre "Go" no NameSpace coloque o nome de UsuarioServiceReference e clique em OK.

 

No Evento Click do Botao faça a chamada remota.

MainPage.xaml

using System.Windows;
using
System.Windows.Controls;
using WCFSilverlight.Cliente.UsuarioServiceReference;

namespace
WCFSilverlight.Cliente
{
   
public partial class MainPage : UserControl
   
{
       
public MainPage()
        {
            InitializeComponent();
        }
   
   
    private void btnOk_Click(object sender, RoutedEventArgs e)
        {
           
UsuarioServiceClient usuarioServiceClient = new UsuarioServiceClient();
            usuarioServiceClient.AutenticarCompleted +=
                                 (sender1, e1) =>
                                        {
                                           
Usuario usuarioLogado = e1.Result;
                                           
if (usuarioLogado != null)
                                                
MessageBox.Show("Usuario autenticado com sucesso: " + usuarioLogado.Login);
                                           
else
                                                
MessageBox.Show("Usuario ou senha inválidos");
                                        };
            usuarioServiceClient.AutenticarAsync(txtLogin.Text, txtSenha.Password);
        }
    }
}

Execute sua aplicação e boa sorte. 

Clique aqui para fazer download do código fonte.

 



Clovis Coli Junior - colijunior@gmail.com

Arquiteto de Software, especialista em desenvolvimento Web

Bacharel em Ciência da Computação pela UNIP (2003), MBA em Gestão de Software

Desde 2001 atuando com desenvolvimento .Net Framework

twitter.com/cloviscoli

 



| | Mais


Comentários

Wenisclayton Mendes
wenisclayton

.NETWenisclayton Mendes

14/4/2010 16:44:24

Muito bom o artigo, bem estruturado e de facil compreenção!

Alliston Carlos
alliston

.NETAlliston Carlos

29/10/2009 20:36:00

Bom artigo e formatação. Esse conteudo irá ajudar muita gente! Parabéns.

José Lino Neto
barley3066

.NETJosé Lino Neto

29/10/2009 11:15:10

Gostei também. principalmente do estilo CSS para ilustrar os códigos fontes. Facilitam a leitura. Parabéns!

Rodrigo Kono
kono

.NETRodrigo Kono

29/10/2009 10:06:23

Excelente artigo Clovis. Muito bom. Bem explicado, bem formatado e disponibilizou o código fonte. Show!

Qual a sua opinião?
Faça o login no topo do site ou cadastre-se rapidamente.



2003-2009 DevGoiás.NET. Todos os direitos reservados.