sexta-feira, 19 de julho de 2013

Asp.Net – Trabalhando com WebServices


O assunto “WebService” já foi discutido em outros artigos de nossa revista, ou seja, o nosso foco principal é demonstrar o funcionamento de uma forma prática no ASP.Net tendo como ferramenta de desenvolvimento o Microsoft Visual Studio. Mas obter informações nunca é demais antes de colocar em prática o uso deste recurso.
Os “WebServices” nasceram com o intuito de compartilhar informações no formato XML utilizando como meio a internet. Utiliza o protocolo SOAP (Simple Object Access Protocol) traduzindo para o português Protocolo Simples de Acesso a Objetos que nada mais é do que um protocolo para troca de informações estruturadas em uma plataforma descentralizada e distribuída. Neste artigo usarei como base um “Webservice” gratuito para obtenção da cotação do dólar. Nossa aplicação possuirá o serviço de WebService e uma pequena aplicação para acessá-lo.

Importante: Este serviço é gratuito, ressaltando que poderá parar de funcionar a qualquer momento ou até mesmo ter diferenças de valores com a cotação real do dólar, por isso servirá apenas como base de aprendizado.

Conhecendo o “WebService”

Acesse o site http://cotacao.republicavirtual.com.br/, note que também temos outros tipos de serviços como Consulta de CEPS, que também poderia ser implementado. No nosso caso usaremos a opção “WebService Cotação de Moedas”. Acessando o link, encontraremos informações para nos auxiliarmos ao decorrer no desenvolvimento de nossa aplicação. Na aba “Exemplos” teremos vários tipos de retorno, como por exemplo: Retorno em XML, em Query String ou em Java-Script. Concentraremos-nos na primeira opção, o retorno em XML, ver imagem 01.

Figura 01: Requisitando o retorno em XML.

O funcionamento será realizado através de uma solicitação HTTP e retornado um documento no formato solicitado.

URL WebService: http://cotacao.republicavirtual.com.br/web_cotacao.php


Criando um exemplo prático

Dividiremos este exemplo em três partes, sendo:

·         Objetos: Onde estão armazenadas as classes utilizadas ao decorrer do desenvolvimento.
·         WSCotacao: Onde será desenvolvido o WebService.
·         BuscaCotacao: Aplicação que irá consumir o WebService.

Crie uma nova “Solution” e a nomeie como desejar. Uma sugestão seria “BuscaCotacao”.

Objetos (Criando a Classe)

Clicando em “File/New/Project...” escolha a opção “Empty Project” para termos um projeto do zero. Em “Name” defina o nome para “Objetos” e em “Solution” altere a opção “Add to solution” para adicioná-lo ao projeto já existente. Ver Imagem 02.

Figura 02: Adicionando recursos ao projeto.

Adicione também uma classe ao projeto, chame-a de “Cotacao”. Esta classe armazenará os seguintes atributos:

- dolar_comercial_venda: Retornar o valor em real (R$) de venda do dólar comercial.
- dólar_comercial_compra: Retornar o valor em real (R$) de compra do dólar comercial.
- dólar_paralelo_venda: Retornar o valor em real (R$) de venda do dólar paralelo.
- dólar_paralelo_compra: Retornar o valor em real (R$) de compra do dólar paralelo.

Dê um duplo clique no arquivo “Cotacao.cs” para codificarmos a classe em questão. Possuiremos os atributos citados anteriormente.

using System;

using System.Text;


namespace Objetos
{
    public class Cotacao
    {
        public string dolar_comercial_compra { get; set; }
        public string dolar_comercial_venda { get; set; }
        public string dolar_paralelo_compra { get; set; }
        public string dolar_paralelo_venda { get; set; }
    }
}

WSCotacao (Criando o WebService)

Esta parte é a mais crucial do artigo, é aqui onde trabalharemos com o WebService. Seguindo os mesmo passos descritos anteriormente, crie um novo projeto, mas só que desta vez crie como “Asp.Net Web Site”. Em “name” defina como “WSCotacao”. Adicione em “References” o objeto “Objetos” (para termos acesso a classe “Cotacao”, Ver Imagem 03.

Figura 03: Adicionando Referências ao projeto.

Este é o momento onde teremos acesso total a classe “Cotacao” implementada anteriormente. O arquivo onde serão publicados os métodos do WebService será do tipo “.asmx”. Para adicioná-lo clique com o botão direito sobre o projeto “WSCotacao” escolhendo “Add/New Item...”. Role até o item “Web Service” e defina em name como “WSConsultaCotacao.asmx”. Ver Imagem 04.

Figura 04: Inserindo um WebService.


Figura 05: WebService Criado.

Abrindo o arquivo o primeiro passo será adicionar as bibliotecas necessárias, Ver Abaixo:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using Objetos;
using System.Xml.Linq;

Inicialmente teremos alguns atributos padrões, sendo:

[WebService(Namespace = "http://tempuri.org/")]

O atributo WebService encontrado na definição da classe permite definir o “namespace” para o “WebService”. Por padrão o “namespace” é definido para http://tempuri.org/ podendo ser alterado para uma URL representando sua empresa por exemplo.


[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]


Já o atributo WebServiceBinding que indica que o “WebService” está em conformidade com a especificação WS-I BP 1.1 – “Web Services Interoperability Basic Profile specification”.


[System.ComponentModel.ToolboxItem(false)]


Este atributo diz se a classe ou controle será disponibilizada para a “ToolBox”, ou seja, marcando esta opção para “false” estaremos impondo que este “WebService” não pode ser visto como um item da toolbox.

Temos também um método publicado “HelloWorld”. A diretiva [WebMethod] indica que este atributo ou método será publicado, funcionará como um “WebService” e será visto por outras aplicações. Removeremos este método para em seguida trabalharmos com o nosso.


public class WSConsultaCotacao : System.Web.Services.WebService
{

A classe “WSConsultaCotacao” automaticamente herda da classe “System.Web.Services.WebService”

        [WebMethod]
        public Cotacao ConsultaCotacao()
        {

            Cotacao cotacao = new Cotacao();

            try
            {
XElement objXElement = new XElement("root");
               objXElement.Add(XElement.Load(url));

var dadosCotacao = (from d in  objXElement.Elements("webservicecotacao")
               select new
               {
dolar_comercial_compra = d.Element("dolar_comercial_compra").Value.ToString(),
dolar_comercial_venda = d.Element("dolar_comercial_venda").Value.ToString(),
dolar_paralelo_compra = d.Element("dolar_paralelo_compra").Value.ToString(),
dolar_paralelo_venda = d.Element("dolar_paralelo_venda").Value.ToString()
               }).Single();

cotacao.dolar_comercial_compra = dadosCotacao.dolar_comercial_compra;
cotacao.dolar_comercial_venda = dadosCotacao.dolar_comercial_venda;
cotacao.dolar_paralelo_compra = dadosCotacao.dolar_paralelo_compra;
cotacao.dolar_paralelo_venda =    dadosCotacao.dolar_paralelo_venda;

            }
            catch (Exception ex)
            {
throw new Exception("Erro ao recuperar a Cotação do Dólar: " + ex.Message);
            }
            return cotacao;
        }

O método terá o nome de “ConsultaCotacao” e como retorno o objeto “Cotacao”, que nada mais é do que a classe que criamos no primeiro tópico. A string “url” terá o endereço para retorno dos dados. Estamos passando também o parâmetro “formato=XML”, é neste exato momento que indicamos ao site para termos como retorno um XML com todos os atributos dos valores da cotação do dólar. Crie um objeto do tipo “Cotacao” para armazenarmos os resultados posteriormente. Dentro de um bloco “Try...Catch” usaremos a classe “XElement”, para nos auxiliar a ler e a carregar o retorno dos dados em XML. Temos um conjunto de dados que deverão ser lidos utilizando uma simples instrução LINQ e logo em seguida atribuídas para as correspondentes variáveis da classe “Cotação”.

Importante: O retorno deste WebService possui outras cotações, como por exemplo, o valor do Euro. Não abordaremos neste artigo.


      }
}
Podemos visualizar o resultado no Browser apertando a tecla “F5”. Ver Imagem 06.

Figura 06: WebService em ação.

Conseguimos visualizar e consultar todos os métodos publicados. Publicamos apenas um chamado “ConsultaCotacao”. Para obter mais detalhes é só clicar sobre o mesmo. Ver Imagem 07.

Figura 07: Testando o WebService.

BuscaCotacao (Consumindo o WebService)

Veremos como é fácil consumir um “WebService” no “Asp.Net”. Para isto crie uma aplicação do tipo “Asp.Net Web Site” e defina o nome como “BuscaCotacao”. Clique com o botão direito e escolha “Add Web Reference”. Ver Imagem 08.

Figura 08: Adicionando um WebService na aplicação.

Possuímos três tipos, sendo:

·         Web services in this solution: “WebService” localizado na própria solução. (Usaremos esta opção)
·         Web services on the local machine: “WebService” localizado na máquina local.
·         Browse UDDI Servers on the local network: Lista servidores disponíveis dentro de uma rede local que fornecem serviços de “WebService”.

Clicando na primeira opção automaticamente será encontrado o “WebService” criado. Escolha o mesmo e defina em “web reference name” como “WSConsultaCotacao” finalizando em “Add Reference”. Ver Imagem 09.

Figura 09: Utilizando o WebService criado.

Para os testes finais usaremos um “Web Form” com os seguintes componentes: 1 ScriptManager, 1 UpdateProgress (Para dar uma mensagem informativa ao usuário quando estivermos consumindo o WebService), 1 UpdatePanel (Atualizarmos apenas uma região da aplicação), 5 Labels, 4 TextBoxes e um Button. A Imagem 10 nos dará uma ideia de lay-Out.

Figura 10: Lay-Out Proposto.

O código ASPX correspondente:

<form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                <table class="style1">
                    <tr>
                        <td class="style2" colspan="2">
                            <asp:Label ID="Label5" runat="server"
                                style="font-weight: 700; text-align: center"
                                Text="Cotação do Dólar em Real (R$)"></asp:Label>
                        </td>
                    </tr>
                    <tr>
                        <td class="style2" colspan="2">
                         <asp:UpdateProgress ID="UpdateProgress1" runat="server">
                                <ProgressTemplate>
                                    Aguarde, pesquisando...
                                </ProgressTemplate>
                            </asp:UpdateProgress>
                        </td>
                    </tr>
                    <tr>
                        <td class="style2">
<asp:Label ID="Label1" runat="server" Text="Venda Dolar Comercial:" style="text-align: right"></asp:Label>
                        </td>
                        <td class="style4">
<asp:TextBox ID="txtCep" runat="server" MaxLength="10" Width="100px"></asp:TextBox>
                        </td>
                    </tr>
                    <tr>
                        <td class="style2">
<asp:Label ID="Label2" runat="server" Text="Compra Dólar Comercial:"
                           style="text-align: right"></asp:Label>
                        </td>
                        <td>
<asp:TextBox ID="txtTipo" runat="server" Width="100px"></asp:TextBox>
                        </td>
                    </tr>
                    <tr>
                        <td class="style2">
<asp:Label ID="Label3" runat="server" Text="Venda Dólar Paralelo:"
                           style="text-align: right"></asp:Label>
                        </td>
                        <td class="style4" style="text-align: left">
<asp:TextBox ID="txtLogradouro" runat="server" Width="100px"></asp:TextBox>
                           </td>
                    </tr>
                    <tr>
                        <td class="style2">
<asp:Label ID="Label4" runat="server" Text="Compra Dólar Paralelo:"
                           style="text-align: right"></asp:Label>
                        </td>
                        <td>
<asp:TextBox ID="txtComplemento" runat="server" Width="100px"></asp:TextBox>
                        </td>
                    </tr>
                    <tr>
                        <td class="style2" colspan="2">
<asp:Button ID="btnConsultaCEP2" runat="server" OnClick="btnConsulta_Click"
                                Text="Consultar" />
                        </td>
                    </tr>
                </table>
            </ContentTemplate>
        </asp:UpdatePanel>
    </div>
    </form>

Importaremos algumas bibliotecas necessárias:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BuscaCotacao.WSConsultaCotacao;

Usaremos o evento Click() do botão para finalizarmos esta etapa.

protected void btnConsulta_Click(object sender, EventArgs e)
{
WSConsultaCotacao.WSConsultaCotacao objWSConsultaCotacao = new WSConsultaCotacao.WSConsultaCotacao();
                                  
     Cotacao cotacao = new Cotacao();
     cotacao = objWSConsultaCotacao.ConsultaCotacao();

     txtDolComCom.Text = cotacao.dolar_comercial_compra;
     txtDolComVen.Text = cotacao.dolar_comercial_venda;
     txtDolParCom.Text = cotacao.dolar_paralelo_compra;
     txtDolParVen.Text = cotacao.dolar_paralelo_venda;
}

Criamos um objeto para o WebService e outro para o armazenamento do resultado do método “ConsultaCotacao”. Finalizamos inserindo os resultados nos “TextBoxes” correspondentes. Ver Imagem 11 o resultado final.

Figura 11: Exemplo em Run-Time.

Conclusões

Hoje em dia, WebService é um tipo de serviço muito utilizado para realizar integração de sistemas de várias plataformas pelo fato de utilizar o protocolo SOAP para troca de informações e o tipo de arquivo no formato XML. A intenção do artigo deste mês foi de ensinar como trabalhar com este recurso utilizando a plataforma .Net, em uma aplicação “Asp.Net”. Espero que estas dicas propostas os auxilie a desenvolver e a consumir seus próprios WebServices. Um forte abraço e até o mês que vem!

Referências


Nenhum comentário:

Postar um comentário