Antes de iniciar a última parte desta série, gostaria de abrir este tópico desejando a todos um ótimo 2011.
Vale lembrar que o conteúdo do artigo está divido em três partes:
- Parte 1: Criação do Projeto e Desenvolvimento da GUI
- Parte 2: Desenvolvimento do nosso WCF (Windows Communication Foundation)
- Parte 3: Consumindo nosso WCF através da nossa aplicação
Todos prontos? Vamos lá!
Abra o projeto e verifique se sua “Solution Explorer” está desse jeito:
Se sua resposta foi NÃO, você acertou! Perceba que a pasta “Service References” ainda não existe no projeto e é ela que iremos criar agora. Será esse serviço que fará a ponte entre nossa aplicação Windows Phone 7 e nossa WCF.
Para adicionar o “Service References”, é só seguir os seguintes passos:
Clique com botão direito sobre o projeto e clique na opção “Add Service Reference”.
Depois de clicar em “Add Service Reference”, teremos a seguinte tela:
Antes de prosseguirmos, vamos à algumas informações úteis sobre essa tela:
- O botão “Discover” vai procurar serviços que estejam dentro da sua solução. Ao clicar nesse botão, os serviços aparecerão no campo “Address”.
- Clicando em “Go”, aparecerão de fato seus serviços na caixa “Services”.
- Expandindo o serviço selecionado, você poderá ver os métodos contidos nele através da caixa “Operations“.
Clicando em OK, nossa “Solution Explorer” ficará assim:
Pronto, agora temos uma interface de comunicação entre nossa aplicação Windows Phone 7 e o mundo exterior, através do nosso serviço. Clique com o botão direito sobre o MainPage.xaml e selecione a opção “View Code” ou simplesmente F7.
Como iremos implementar um número considerável de linhas, irei escrevendo e comentando cada bloco e no final disponibilizarei todo o projeto para que vocês possam implementar nos seus projetos, ok?
Antes de mais nada, vamos trazer o nosso serviço através do Namespace que nós demos anteriormente. Lembre-se de que estou usando meu projeto. Caso você tenha criado com nomes diferentes, fique atento para não colocar o nome errado nos arquivos ou nas chamadas.
using Zodiac.SR_Zodiac;
Criamos um “enum” para representar os 12 signos do zodíaco, de modo que não precisaremos informar o número que representa o signo, e sim o nome.
public enum SIGNO
{
ARIES = 1,
TOURO = 2,
GEMEOS = 3,
CANCER = 4,
LEAO = 5,
VIRGEM = 6,
LIBRA = 7,
ESCORPIAO = 8,
SAGITARIO = 9,
CAPRICORNIO = 10,
AQUARIO = 11,
PEIXES = 12,
}
Criamos um método para alterar o título da tela de acordo com o signo escolhido.
private void EscreveTitulo(SIGNO p_nValue)
{
switch (p_nValue)
{
case SIGNO.ARIES:
this.txtTituloPrevisao.Text = "Áries - Seu Horóscopo Hoje:";
break;
case SIGNO.TOURO:
this.txtTituloPrevisao.Text = "Touro - Seu Horóscopo Hoje:";
break;
case SIGNO.GEMEOS:
this.txtTituloPrevisao.Text = "Gêmeos - Seu Horóscopo Hoje:";
break;
case SIGNO.CANCER:
this.txtTituloPrevisao.Text = "Câncer - Seu Horóscopo Hoje:";
break;
case SIGNO.LEAO:
this.txtTituloPrevisao.Text = "Leão - Seu Horóscopo Hoje:";
break;
case SIGNO.VIRGEM:
this.txtTituloPrevisao.Text = "Virgem - Seu Horóscopo Hoje:";
break;
case SIGNO.LIBRA:
this.txtTituloPrevisao.Text = "Libra - Seu Horóscopo Hoje:";
break;
case SIGNO.ESCORPIAO:
this.txtTituloPrevisao.Text = "Escorpião - Seu Horóscopo Hoje:";
break;
case SIGNO.SAGITARIO:
this.txtTituloPrevisao.Text = "Sagitário - Seu Horóscopo Hoje:";
break;
case SIGNO.CAPRICORNIO:
this.txtTituloPrevisao.Text = "Capricórnio - Seu Horóscopo Hoje:";
break;
case SIGNO.AQUARIO:
this.txtTituloPrevisao.Text = "Aquário - Seu Horóscopo Hoje:";
break;
case SIGNO.PEIXES:
this.txtTituloPrevisao.Text = "Peixes - Seu Horóscopo Hoje:";
break;
default:
break;
}
}
Criamos um método chamado LoadService. Esse método irá disparar um evento criado por nós para que as informações desejadas sejam exibidas na tela do aparelho.
LoadService:
public void LoadService(SIGNO p_nValue)
{
try
{
ServiceZodiacClient zc = new ServiceZodiacClient();
zc.GetPrevisaoCompleted += new EventHandler<SR_Zodiac.GetPrevisaoCompletedEventArgs>(zc_GetPrevisaoCompleted);
zc.GetPrevisaoAsync((int)p_nValue);
this.EscreveTitulo(p_nValue);
}
catch (Exception ex)
{
throw ex;
}
}
Evento zc_GetPrevisaoCompleted:
void zc_GetPrevisaoCompleted(object sender, SR_Zodiac.GetPrevisaoCompletedEventArgs e)
{
try
{
int pos = -1;
String sTexto;
this.ContentGrid.Visibility = System.Windows.Visibility.Collapsed;
this.TextGrid.Visibility = System.Windows.Visibility.Visible;
sTexto = e.Result.ToString();
pos = sTexto.IndexOf("<a");
this.txtPrevisao.Text = sTexto.Substring(0, pos - 1);
}
catch (Exception ex)
{
this.txtPrevisao.Text = ex.Message;
}
}
E, no evento KeyDown de cada signo, chamaremos o método LoadService, passando como parâmetro o valor correspondente ao signo clicado.
private void iAries_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
try
{
this.LoadService(SIGNO.ARIES);
}
catch (Exception ex)
{
throw ex;
}
}
Explicando:
No método LoadService, criamos um objeto ServiceZodiacClient para poder fazer a comunicação com nosso serviço. Esse serviço trabalha com eventos, ou seja, é preciso que um evento seja disparado para que ele seja “ativado” e por isso escrevemos a linha “zc.GetPrevisaoCompleted += new EventHandler…”, estamos fazendo uma chamada do evento GetPrevisaoCompleted do nosso serviço.
No “zc.GetPrevisaoAsync”, estamos passando o valor do parâmetro esperado pelo serviço. Depois disso, nosso evento é disparado, e o resultado retornado é o texto vindo do xml recuperado, como vimos na parte 2 do artigo.
Na prática, nossa aplicação final funcionará assim:
Clicamos sobre o signo selecionado.
E obtemos o horóscopo do dia.
Bem, pessoal, aqui fecho essa série de artigos sobre Windows Phone 7. Os arquivos utilizados nessa série estão aqui.
Uma abraço a todos e até o próximo artigo.