VB .NET - Consumindo um Web Service - Correios (MetroFramework)


 Neste artigo vou mostrar como consumir um Web Service em uma aplicação Windows Forms que usa o estilo Metro usando a linguagem VB .NET.

Se você deseja ou precisa usar o estilo Metro em aplicações Windows Forms você pode usar o framework MetroFramework que fornece os recursos para criar interfaces nesse estilo de forma relativamente simples e gratuita. Veja o meu artigo sobre como usar o MetroFramework:  VB .NET - Implementando interfaces ao estilo Metro com ... - Macoratti

Imagine  um componente cujos recursos  possam ser acessados na Internet via TCP/IP,  independente do Sistema Operacional  e de qualquer lugar como se o componente estivesse instalado na sua máquina ; um componente que não sofresse as restrições dos Firewalls e que fosse totalmente integrado ao seu ambiente. Estou falando de WebServices.

 

Vamos consumir um web service existente e disponibilizado pelos correios para consulta de CEP na aplicação Windows. Para fazer a comunicação com o serviço vamos usar o protocolo SOAP (Simple Object) que permite a troca de informações de forma semelhante ao protocolo HTTP com GET e POST.

 

O serviço de consulta de CEP oferecido pelo web service dos correios esta disponível no seguinte end point : https://apps.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente?wsdl

Chamando esta URL em um navegador iremos obter o seguinte resultado:

Notou a palavra wsdl na URL ?

O WSDL ou Web Services Description Language é um padrão baseado em XML que serve para descrever os Web Service, ele contém os métodos públicos do serviço.

No nosso exemplo vamos informar o CEP e obter as informações para o endereço, complemento, cidade, bairro e uf.

Então vamos ao que interessa...

Recursos Usados :

Criando o projeto Windows Forms e Incluindo a referência ao Web Service

Abra o VS 2017 Community e crie um novo projeto (File-> New Project) usando a linguagem Visual C# e o template Windows Classic Desktop ->Windows Forms Application(.NET Framework)

Informe um nome a seu gosto. Eu vou usar o nome Vbn_WebService.

Agora para poder consumir o web service em nossa aplicação vamos incluir uma referência ao serviço no projeto

Clique com o botão direito do mouse sobre o projeto e a seguir clique em Add -> Service Reference;

Na janela Add Service Reference copie e cole o endereço de atendimento do web service e clique em Go:

Altere o nome em Namespace para CorreioService e clique no botão OK.

No menu Build clique em Rebuild Solution.

Você deverá visualizar no projeto Windows Forms a referência ao serviço conforme mostra a figura abaixo:

Definindo o modelo de domínio

Crie uma pasta Model no projeto e a seguir crie o arquivo Endereco.cs onde vamos definir a classe Endereco que representa o nosso modelo de domínio, ou seja o resultado da consulta.

O código segue abaixo:

Public Class Endereco
    Public Property Descricao() As String
    Public Property Complemento() As String
    Public Property Bairro() As String
    Public Property Cidade() As String
    Public Property EstadoUF() As String
End Class

Definindo a interface com o usuario usando os recursos do MetroFramework

Vamoa agora incluir a referência à biblioteca do MetroFramework em nosso projeto via Nuget.

No menu Tools clique em Nuget Package Manager e a seguir em Manage Nuget Packages for Solution;

A seguir informe metromodernui e clique em Browse;

Selecione o pacote encontrado, marque o projeto onde deseja instalar, e clique no botão Install; (A versão atual no momento que escrevi este artigo era a v1.4.0)

Após instalar o pacote você deve incluir os controles na ToolBox conforme eu mostro no neste artigo:  VB .NET - Implementando interfaces ao estilo Metro com ... - Macoratti

Selecione o formulário Form1.vb no projeto e expanda os objetos clicando em InitializeComponent();

Substitua na palavra-chave Inherits System.Windows.Forms.Form por MetroFramework.Forms.MetroFrom. Salve e clique em Form1.vb para ver como ficou a interface:

A partir da ToolBox vamos incluir no formulário os seguintes controles:

Disponha os controles conforme o leiaute da figura abaixo:

Implementando o código para consumir o web service

Consumir o web service é bem simples. Com apenas duas linhas de código podemos fazer isso.

Dim correios = New CorreioService.AtendeClienteClient()
Dim consulta = correios.consultaCEP("13120-125")

Basta criar uma instância da classe CorreioService, método AtendeClienteClient, e a seguir usar o método consultaCEP().

No nosso exemplo vamos usar a classe Endereco para obter os dados retornados e exibir o resultado no formulário.

No código do evento Click do botão de comando Consultar CEP inclua o código abaixo:

Public Class Form1
    Private Sub btnConsultarCEP_Click(sender As Object, e As EventArgs) Handles btnConsultarCEP.Click
        Dim resultado As Endereco = Nothing
        If Not String.IsNullOrEmpty(txtCep.Text) Then
            Try
                Using correios = New CorreioService.AtendeClienteClient()
                    Dim consulta = correios.consultaCEP(txtCep.Text.Replace("-", ""))
                    If consulta IsNot Nothing Then
                        resultado = New Endereco()
                        resultado.Descricao = consulta.end
                        resultado.Complemento = consulta.complemento
                        resultado.Bairro = consulta.bairro
                        resultado.Cidade = consulta.cidade
                        resultado.EstadoUF = consulta.uf
                    End If
                End Using
                txtEndereco.Text = resultado.Descricao
                txtComplemento.Text = resultado.Complemento
                txtCidade.Text = resultado.Cidade
                txtBairro.Text = resultado.Bairro
                txtUF.Text = resultado.EstadoUF
            Catch ex As Exception
                MetroFramework.MetroMessageBox.Show(Me, ex.Message, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
        Else
            MetroFramework.MetroMessageBox.Show(Me, "Dados inválidos. Informe o CEP." & vbNewLine & "Ex: 12345-678 ou 12345678", "Aviso", 
MessageBoxButtons.OK, MessageBoxIcon.Information, 120)
        End If
    End Sub
End Class

Agora é só alegria...

Executando o projeto temos o seguinte resultado:

Temos assim a nossa aplicação Windows Forms usando o estilo Metro e consumindo um web service.

Pegue o código da solução aqui:  Vbnet_WebServices.zip (sem as referências)

O Senhor reinará eterna e perpetuamente; Êxodo 15:18

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

 

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
 

Referências:


José Carlos Macoratti