13 09 2017
Como consultar CEP no .NET?
Uns tempos atrás eu escrevi um artigo mostrando como acessar os web services dos Correios com C# e VB.NET. De lá para cá, eu tenho visto vários vídeos sendo publicados mostrando especificamente a parte de consulta de CEPs. Porém, eu não consegui encontrar um vídeo sobre esse assunto que fosse extremamente sucinto. Por isso, me lancei o desafio de gravar o vídeo mais claro, simples, objetivo e curto mostrando como consultar CEP no .NET. Aqui vai o resultado:
Adicionando a referência ao web service dos Correios
A primeira coisa que temos que fazer para consultarmos CEPs com os web services dos Correios é adicionarmos a referência para o web service. Isso é super tranquilo de ser feito. No Visual Studio, clicamos com o botão direito em “References” e escolhemos a opção “Add Service Reference“:
Na janela que se abre, temos que informar a URL do serviço, clicar em “Go“, dar um nome para o serviço (no caso eu escolhi o nome “WSCorreios“) e clicar em “OK” para gerar as classes de acesso. A URL do web service que implementa a consulta de CEPs dos Correios é a seguinte:
https://apps.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente?wsdl
Consultando CEPs
Para demonstrar a consulta de CEPs, desenhei uma tela bem simples com os campos relacionados ao endereço:
A chamada para o web service é muito tranquila a partir do Visual Studio. Nós só temos que instanciar o serviço (o qual nós adicionamos a referência no passo anterior) e chamar o método desejado (nesse caso, “consultaCEP“). O método de consulta de CEPs só recebe um parâmetro, que é o próprio CEP no formato em string. O retorno do método será uma instância da classe de endereço dos Correios, que conterá todas as informações do endereço consultado (bairro, cidade, etc).
Veja como é que fica o código do clique do botão:
// C# private void btBuscar_Click(object sender, EventArgs e) { using (var ws = new WSCorreios.AtendeClienteClient()) { var resultado = ws.consultaCEP(tbCEP.Text); tbEndereco.Text = resultado.end; tbComplemento.Text = resultado.complemento; tbComplemento2.Text = resultado.complemento2; tbCidade.Text = resultado.cidade; tbBairro.Text = resultado.bairro; tbEstado.Text = resultado.uf; } }
' VB.NET Private Sub BtBuscar_Click(sender As Object, e As EventArgs) Handles BtBuscar.Click Using WS = New WSCorreios.AtendeClienteClient() Dim Resultado = WS.consultaCEP(TbCEP.Text) TbEndereco.Text = Resultado.[end] TbComplemento.Text = Resultado.complemento TbComplemento2.Text = Resultado.complemento2 TbCidade.Text = Resultado.cidade TbBairro.Text = Resultado.bairro TbEstado.Text = Resultado.uf End Using End Sub
Tratando possíveis erros
Se tentarmos passar algum conteúdo inválido para o web service, ele não retornará um erro, mas sim, lançará uma exceção. Dessa forma, para tratarmos os erros retornados pelos serviços dos Correios, temos que colocar o nosso código em um bloco “try/catch“:
// C# private void btBuscar_Click(object sender, EventArgs e) { using (var ws = new WSCorreios.AtendeClienteClient()) { try { var resultado = ws.consultaCEP(tbCEP.Text); tbEndereco.Text = resultado.end; tbComplemento.Text = resultado.complemento; tbComplemento2.Text = resultado.complemento2; tbCidade.Text = resultado.cidade; tbBairro.Text = resultado.bairro; tbEstado.Text = resultado.uf; } catch (Exception ex) { MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); } } }
' VB.NET Private Sub BtBuscar_Click(sender As Object, e As EventArgs) Handles BtBuscar.Click Using WS = New WSCorreios.AtendeClienteClient() Try Dim Resultado = WS.consultaCEP(TbCEP.Text) TbEndereco.Text = Resultado.[end] TbComplemento.Text = Resultado.complemento TbComplemento2.Text = Resultado.complemento2 TbCidade.Text = Resultado.cidade TbBairro.Text = Resultado.bairro TbEstado.Text = Resultado.uf Catch Ex As Exception MessageBox.Show(Ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.[Error]) End Try End Using End Sub
Baixe o projeto de exemplo
Para baixar o projeto de exemplo desse artigo, assine a minha newsletter. Ao fazer isso, além de ter acesso ao projeto, você receberá um e-mail toda semana sobre o artigo publicado e ficará sabendo também em primeira mão sobre o artigo da próxima semana, além de receber dicas “bônus” que eu só compartilho por e-mail. Inscreva-se utilizando o formulário no final do artigo.
Concluindo
Como você pode perceber nesse vídeo, a consulta de CEPs é extremamente fácil de ser implementada no .NET utilizando os web services dos Correios. Em pouco menos de 5 minutos você conferiu como adicionar a referência ao serviço e como consultar CEP no .NET. Além disso, vimos como podemos tratar as mensagens de erro utilizando um bloco “try/catch“. Essa mesma sistemática pode ser utilizada em todos os tipos de projetos, como Console Application, WPF, web e mobile.
E você? Já implementou consulta de CEPs na sua aplicação? Utilizou os web services dos Correios ou alguma outra sistemática? Fico aguardando as suas observações na caixa de comentários logo abaixo!
Até a próxima!
André Lima
Photo by Peter Shanks used under Creative Commons
https://pixabay.com/en/startup-start-up-notebooks-creative-593327/
Song Rocket Power Kevin MacLeod (incompetech.com)
Licensed under Creative Commons: By Attribution 3.0 License
http://creativecommons.org/licenses/by/3.0/
Definindo a estrutura de campos do Report Viewer sem DataSet ou classe Aplicações Android com Xamarin – Parte 5 de N – Navegação entre telas
Bom dia professor este como sempre foi ótimo já estou testando o brigado
Valeu, Deuzivaldo! Qualquer dúvida é só entrar em contato..
Abraço!
André Lima
Implementado e em funcionamento. Muito bom!!!!
Bacana, André! Obrigado pelo comentário! Que bom que funcionou aí na sua solução também.. :)
Qualquer dúvida é só entrar em contato..
Abraço!
André Lima
Excelente artigo André.
Olá Alessandra! Muito obrigado, fico feliz que tenha gostado.. :)
Abraço!
André Lima
Boa noite, André. Parabéns para tutorial. Gostaria de saber se é possível implementar para captura do objeto dos correios. (aquele que mostrar o status do pedido). Muito obrigado.
Olá Luiz, obrigado pelo comentário!
Os Correios disponibilizam um web service para esse tipo de consulta, mas na época que eu escrevi o meu artigo original, que eu me lembre, precisava de usuário e senha.. Umas semanas atrás um outro leitor postou o link de um serviço de rastreio dos Correios que aparentemente não precisa de usuário e senha.. Como te respondi no outro comentário, se você quiser tentar aí, me avisa depois se funcionou.. A URL do serviço é esta:
http://webservice.correios.com.br/service/rastro/Rastro.wsdl
Abraço!
André Lima
Show André! Em breve estarei testando no meu projeto!! Obrigado e até a próxima!!
Legal, Luiz! Qualquer dúvida é só entrar em contato..
Abraço!
André Lima
Simples e funcional. Perfeito, parabéns!
Valeu, Fernando! Muito obrigado pelo comentário! Fico feliz que tenha gostado.. :)
Abraço!
André Lima
Olá André, venho acompanhando seus post de Quarta e Sexta há meses! Parabéns pelo empenho em sempre postar coisas novas! André, sei que mexes com bastante coisas em relação ao .Net estou procurando API ou SDK para Biometria, conheces alguma(s)? de preferência Open Source. Sugiro então um post sobre o Assunto: Biometria com .Net.
Grato pela atenção
Olá Ademi, muito obrigado pelo comentário!
Eu particularmente nunca trabalhei com biometria, mas um outro leitor do site já comentou comigo que implementou autenticação com o leitor biométrico da Digital Persona.. Ele me prometeu mandar o código para eu compartilhar aqui no site, mas até agora não me mandou.. Coloquei uma observação aqui na minha lista e, assim que eu tiver notícias dele, eu te aviso..
Abraço!
André Lima
Rapaz, ficou show, rápido e explicativo, vi mais de 10 videos até chegar no seu parabéns, já ganho um seguidor.
Olá David, valeu demais pelo comentário! Fico feliz por ter conseguido ajudar.. :)
Abraço!
André Lima
Olá André… teu site me ajudou bastante até agora… Meus parabéns… Mas tira uma dúvida minha se puderes! Quero fazer essa mesma consulta, mas colocando o endereço para achar o CEP ao invés do CEP para achar o endereço! Tem como?
Olá Luca!
Até onde eu sei, com o web service dos Correios você não consegue fazer o caminho inverso (consulta de CEP por endereço).. Nesse caso, se eu não estiver enganado, você terá que utilizar outro tipo de serviço, como este aqui:
https://viacep.com.br/
Abraço!
André Lima
Simplesmente fantástico. Muito obrigado professor.
De nada, Edilson! Obrigado pelo comentário!
Abraço!
André Lima