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
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