.NET

27 out, 2010

Windows Phone 7, indo além do hello world – Parte 02

Publicidade

Antes de iniciar a segunda etapa desta série, gostaria de agradecer aos elogios sobre a primeira parte do artigo.

Vale lembrar que o conteúdo está dividido em três partes:

Preparado para a segunda parte? Vamos lá!

Para começar, abra seu projeto no Visual Studio 2010. Na Solution Explorer, clique com o botão direito sobre o projeto e escolha a opção: “Add->New Project”

Depois escolhemos no menu lateral a opção WCF seguido da opção “WCF Service Application” e damos um nome ao nosso WCF.

Antes de prosseguir, dvou explicar um pouco sobre o que é WCF, caso você ainda não conheça.
Segundo o Wikipédia, WCF é:

Windows Communication Foundation (WCF) é um modelo de programação unificado e ambiente de execução (Framework) criado pela Microsoft que visam a construção de aplicações orientadas a serviços (Service Oriented Architecture). O objetivo principal do WCF permitir que analistas e desenvolvedores criem aplicações voltadas para computação distribuída.O WCF possui ainda um conjunto de bibliotecas (classes) que permitem aos desenvolvedores criar estas aplicações para funcionarem sob o sistema operacional Windows.

Ainda parece confuso? Aqui você pode encontrar uma introdução muito boa feito pelo mestre Macoratti.

Depois de criado o nosso WCF, a nosso projeto deverá deve ficar assim:

Agora vamos colocar a mão na massa de verdade!

Note que temos ali os arquivos IService1.cs e o Service1.svc

O arquivo IService1.cs é uma interface (não confundir com GUI) onde terão as assinaturas dos métodos que o nosso WCF irá disponibilizar. Nesse arquivo você notará que já existem duas assinaturas de métodos, o que iremos fazer é adicionar a nossa assinatura para que nosso método possa ser implementado.

Logo após o comentário “// TODO: Add your service operations here”, colocaremos o seguinte código:

[OperationContract]
string GetPrevisao(int value);

O que fizemos foi definir o método GetPervisao que receberá um inteiro como parâmetro e retornará uma valor do tipo string. Perceba que ainda não precisamos implementar nosso método, apenas dizemos o que precisamos e o que devolveremos.

Nosso código ficará assim:

No arquivo Service1.svc iramos implementar o nosso método GetPrevisao.

Este método irá receber um parâmetro inteiro que representará o signo que se deseja obter a previsão do dia. A previsão será obtida através do site horoscopofree.com.br, que disponibiliza um arquivo xml que tem as previsões diárias de cada signo.

O nosso código ficará assim:

public string GetPrevisao(int p_nSigno)
{
try
{
string sReturn = "";
XDocument xml = XDocument.Load(@"http://www.horoscopofree.com/pt/misc/partnership/Horoscopo.xml?HFPTS=526bf73c3babbce8ed5371f7633e3a5e");

switch (p_nSigno)
{
case 1:
sReturn = "Áries";
break;
case 2:
sReturn = "Touro";
break;
case 3:
sReturn = "Gêmeos";
break;
case 4:
sReturn = "Câncer";
break;
case 5:
sReturn = "Leão";
break;
case 6:
sReturn = "Virgem";
break;
case 7:
sReturn = "Libra";
break;
case 8:
sReturn = "Escorpião";
break;
case 9:
sReturn = "Sagitário";
break;
case 10:
sReturn = "Capricórnio";
break;
case 11:
sReturn = "Aquário";
break;
case 12:
sReturn = "Peixes";
break;
default:
sReturn = "service off...";
break;
}

var Horoscopo =
from rss in xml.Descendants("item")
where (rss.Element("title").Value == sReturn)
select new
{
Descricao = (string)rss.Element("description").Value
};

foreach (var dados in Horoscopo)
{
sReturn = dados.Descricao;
}

return sReturn;
}
catch (Exception ex)
{
throw ex;
}
}

Nesse código lemos o arquivo xml do horóscopo free e a partir do parâmetro definimos de que signo iremos obter o horóscopo. Esse arquivo xml traz todos os signos de uma única vez, então precisamos utilizar uma maneira para “filtar” apenas o signo que desejamos obter.

Para fazer isso, utilizamos LINQ para fazer esse filtro. 

A variável rss irá guardar o resultado que desejamos obter, detalhe para alguns pontos do nosso código:

  • from rss in xml.Descendants(“item”). Aqui estamos trazendo para a variável rss todo o conteúdo contigo na tag “item” do xml.
  • where (rss.Element(“title”).Value == sReturn). Aqui estamos filtrando nosso xml quando o conteúdo da tag “title” é igual a nossa variável correspondente ao signo que se deseja obter a previsão.
  • select new { Descricao = (string)rss.Element(“description”).Value }. Aqui estamos selecionado descrição contida na tag “description” que por sua vez esta contida na tag “tittle” que filtramos anteriormente.
foreach (var dados in Horoscopo)
{
sReturn = dados.Descricao;
}

Aqui nós varremos a nossa variável Horoscopo retornamos a descrição obtida.

Com isso finalizamos aqui o nosso WCF. Esse cara vai ser o responsável por trazer para nosso aplicativo as informações que precisamos para exibir no aparelho do usuário.

No próximo artigo veremos como fazer isso na prática e disponibilizarei todo o código fonte do projeto.

Até a próxima e um abraço a todos.