Com o grande crescimento da criação de aplicações para aparelhos móveis, surgiu a necessidade de consumir serviços da web para facilitar ainda mais a integração entre os sistemas operacionais. Então neste artigo você verá como criar um serviço WCF e como consumi-lo através de uma aplicação Windows Phone.

Ilustração de conexão do Windows Phone na Nuvem

Figura 1: Ilustração de conexão do Windows Phone na Nuvem

WCF é a abreviação de Windows Communication Foundation, que é um framework para construção de aplicações orientadas a serviços. Com o WCF você pode enviar dados como mensagens assíncronas de um terminal de serviço para outro. As mensagens podem ser tão simples como uma única palavra enviada por XML, até um complexo fluxo de dados binários.

Para criar um serviço WCF será necessário uma versão completa do Visual Studio, então se você estiver com um Visual Studio Express for Windows Phone, não terá como cria-lo. Caso você tenha uma versão mais completa, abra o Visual Studio e crie um projeto do tipo WCF Service Application com o nome de ServicoTeste, conforme mostra a Figura 2.

Criação do projeto ServicoTeste no Visual Studio

Figura 2: Criação do projeto ServicoTeste no Visual Studio

Agora vá ao Solution Explorer e exclua a interface IService1 e a classe Service1, conforme mostra a Figura 3.

Excluindo arquivos padrões criados

Figura 3: Excluindo arquivos padrões criados

Estes arquivos foram excluídos porque por padrão o Visual Studio criou um exemplo, mas nessa aplicação iremos criar um diferente, portanto vá ao Solution Explorer novamente e adicione um novo item do tipo WCF Service com o nome de SistemaMovelService, como mostra a Figura 4.

Adicionando um novo item ao Solution Explorer

Figura 4: Adicionando um novo item ao Solution Explorer

Agora você pode notar que foram criados dois arquivos, o ISistemaMovelService.cs e o SistemaMovelService.svc. Abra a interface ISistemaMovelService e adicione as seguintes informações, conforme a Listagem 1.

Listagem 1: Interface ISistemaMovel.cs


using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace ServicoTeste
{
    [ServiceContract]
    public interface ISistemaMovelService
    {
        [OperationContract]
        List<SistemaMovel> GetSistemas();
    }

    [DataContract]
    public class SistemaMovel
    {
        [DataMember]
        public string Nome { get; set; }

        [DataMember]
        public string Empresa { get; set; }
    }
}

Agora você deve implementar essa interface no SistemaMovel.svc conforme a Listagem 2.

Listagem 2: Implementação da interface ISistemaMovelService


using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace ServicoTeste
{
    public class SistemaMovelService : ISistemaMovelService
    {

        public List<SistemaMovel> GetSistemas()
        {
		List<SistemaMovel> sistemas = new List<SistemaMovel>();
		sistemas.Add(new SistemaMovel()
		{
			Nome = "Windows Phone",
			Empresa = "Microsoft"
		});

		sistemas.Add(new SistemaMovel()
		{
			Nome = "IOS",
			Empresa = "Apple"
		});

		sistemas.Add(new SistemaMovel()
		{
			Nome = "Android",
			Empresa = "Google"
		});

		sistemas.Add(new SistemaMovel()
		{
			Nome = "Symbian",
			Empresa = "Nokia"
		});

		sistemas.Add(new SistemaMovel()
		{
			Nome = "Firefox OS",	
			Empresa = "Firefox"
		});

		return sistemas;
        }
    }
}

Foi criada uma lista de dados com o nome de alguns sistemas operacionais para Smartphones, que serão utilizados no consumo do aplicativo a ser criado.

Serviço aberto no browser

Figura 5: Serviço aberto no browser

Para visualizar o serviço que foi criado, clique com o botão direito em SistemaMovel.svc e depois em View in Browser. O serviço será exibido no browser conforme a Figura 5, mantenha-o aberto. Agora você deve abrir uma nova instância do Visual Studio e criar um projeto do tipo Windows Phone Application com o nome de AppConsumindoWCF, conforme a Figura 6.

Criação do projeto AppConsumindoWCF no Visual Studio

Figura 6: Criação do projeto AppConsumindoWCF no Visual Studio

Ao criar o projeto é exibida uma caixa com a opção de escolha da versão do Windows Phone, escolha a 7.1, pois assim o seu aplicativo funcionará em todas as versões de Windows Phone disponíveis.

A primeira coisa a se fazer é adicionar uma referência ao serviço que você criou, para isso clique com o botão direito em References e depois Add Service Reference.

Adicionando a referência ao projeto

Figura 7: Adicionando a referência ao projeto

Adicione o endereço (que pode ser encontrado na barra de endereços no browser, onde o serviço está aberto) conforme é mostrado na Figura 7, e clique em Go. Depois modifique o nome do NameSpace para ServicoTeste e clique em Ok.

Agora o próximo passo é preparar o layout e a maneira como serão exibidos os dados. Abra a MainPage.xaml e adicione os controles necessários ao ContentPanel conforme a Listagem 3. As informações serão exibidas em forma de lista, utilizando o ListBox.

Listagem 3: Criação do layout na MainPage.xaml


<!--ContentPanel - place additional content here-->
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
	<StackPanel Width="450" Height="500">
        	<TextBlock Text="Sistemas móveis para smartphones" Foreground="White"
		FontSize="22" />
		<ListBox Name="lstSistemasMoveis" Width="450" Height="470">
			<ListBox.ItemTemplate>
				<DataTemplate>
					<StackPanel Orientation="Horizontal">
						<TextBlock Text="{Binding Nome}"
						TextWrapping="Wrap" FontSize="25" />

						<TextBlock Text="{Binding Empresa}"
						TextWrapping="Wrap" FontSize="25" />
					</StackPanel>
				</DataTemplate>
			</ListBox.ItemTemplate>
		</ListBox>
		</StackPanel>
</Grid>

Agora você deve abrir a classe MainPage.xaml.cs e adicionar no topo uma referência para AppConsumindoWCF.ServicoTeste, e no construtor colocar uma chamada para um método, para que seja executado assim que abrir a aplicação. Nesse método chamado MainPage_Loaded você irá instanciar a classe SistemaMovelServiceClient e adicionar o método de CallBack da chamada assíncrona, e esse método será responsável por passar as informações para o listbox. Confira como ficará a classe MainPage.xaml.cs na Listagem 4.

Listagem 4: Arquivo MainPage.xaml.cs


using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using AppConsumindoWCF.ServicoTeste;

namespace AppConsumindoWCF
{
    public partial class MainPage : PhoneApplicationPage
    {
        // Constructor
        public MainPage()
        {
            InitializeComponent();
            this.Loaded += MainPage_Loaded;
        }

        void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            SistemaMovelServiceClient svc = new SistemaMovelServiceClient();
            svc.GetSistemasCompleted += svc_GetSistemasCompleted;
            svc.GetSistemasAsync();
        }

        void svc_GetSistemasCompleted(object sender,
 GetSistemasCompletedEventArgs e)
        {
            lstSistemasMoveis.ItemsSource = e.Result;
        }
    }
}

Agora você já pode executar a aplicação pressionando F5, que ficará conforme a Figura 8.

Aplicação em funcionamento

Figura 8: Aplicação em funcionamento

Um abraço e até o próximo artigo.