Novas tecnologias
No artigo anterior mostrei como consumir um web service dos correios usando o .NET Full Framework no Visual Studio 2015, e expliquei como é o funcionamento do mesmo, caso queira ver o artigo anterior pode clicar aqui.
Com o advento do projeto do .NET Core algumas coisas mudaram, agora o .NET pode ser executado multi-plataforma e com isso ganhou novos adeptos a linguagem, junto veio uma nova ide que também é multi-plataforma, o Visual Studio Code, ela é bem mais simples que o tradicional Visual Studio, mais já está ganhando espaço entre os desenvolvedores.
Um pouco do .NET Core
O ASP.NET Core é uma estrutura web de código aberto e gratuita, é a próxima geração do .NET, desenvolvida pela Microsoft e pela comunidade. Podendo ser executada em multi-plataformas.
Originalmente era para se chamar .NET vNext, mais com o passar do tempo passou a ser chamado de .NET Core que teve sua versão 1.0 lançada em 17 de maio de 2016, hoje já se encontra na versão 2.0 e tendo bastante aceitação por toda a comunidade.
Preparação do ambiente
Nesse projeto de exemplo vamos utilizar o Visual Studio 2017 para montar nosso projeto, antes de criar o projeto temos que instalar uma ferramenta para gerar nossa Web Reference a partir do endereço wsdl do serviço, pois o Visual Studio ainda não possui tolling para fazer isso.
Para instalar a ferramenta vamos em Toos > Extensions and Updates, conforme a imagem abaixo:
Na janela que vai abrir vamos clicar na Opção Online e vamos buscar por “Microsof Web Service reference provider”, conforme abaixo:
Após localiza-lo na lista, basta clicar em download, quando terminar o download ele vai pedir para fechar o Visual Studio para completar a instalação.
Criando nosso projeto
Terminada a instalação é hora de iniciar nosso projeto. Vamos criar um projeto novo do tipo Web e vamos selecionar a opção ASP.NET Core Web Application, conforme a imagem abaixo:
Na segunda tela vamos selecionar a opção Web Application (Model-View-Controller):
Após ter feito isso vamos pegar a base do artigo anterior, vamos criar nossa referência externa para o endereço https://apps.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente?wsdl, para isso clique com o botão direito em cima da solução, vá em Add, Conected Services.
Na próxima tela vamos selecionar a opção Microsoft WCF Web Service Reference Provider conforme a image abaixo:
Após isso, vai abrir uma janela para informar o wsdl do serviço:
Devemos informar a url: https://apps.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente?wsdl e clicar em Go para ele consultar o descritor do serviço. Vamos aproveitar trocar o Namespace para Correios conforme abaixo:
Criando a consulta
Como no artigo anterior, vamos criar nossos modelos para alimentar o retorno do Web Service, para isso vamos criar 2 classes, uma Cep e a outra Endereço.
public class Cep { [Required] [MaxLength(9, ErrorMessage = "Cep tem que ser digitado no formato 70000-000")] [MinLength(9, ErrorMessage ="Cep tem que ser digitado no formato 70000-000")] public string Codigo { get; set; } } public class Endereco { public string Descricao { get; set; } public string Complemento { get; set; } public string Bairro { get; set; } public string Cidade { get; set; } public string UF { get; set; } }
Na nossa view vamos ter um textbox para informar o cep o mesmo vai dar um post para a controler passando o nosso cep:
@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) { <div class="form-group> <div class="input-group"&amp;amp;gt; @Html.ValidationSummary(true, "", new { @class = "text-danger" }) @Html.TextBoxFor(m =&amp;amp;gt; m.Codigo, new { @class = "form-control" }) <span class="input-group-btn"> <input type="submit" value="Buscar" class="btn btn-default" /> </span> </div> </div> <div> @Html.ValidationMessageFor(m =&amp;amp;gt; m.Codigo, "", new { @class = "text-danger" }) </div> }
Na controller vamos receber o objeto e fazer a consulta no Web Service, com o retorno vamos alimentar o objeto Endereco para apresentar na view, conforme o código abaixo:
[HttpPost] public IActionResult Index(Models.Cep cep) { if (!ModelState.IsValid) { return View(cep); } var correios = new Correios.AtendeClienteClient(); var consulta = correios.consultaCEPAsync(cep.Codigo.Replace("-", "")).Result; if (consulta != null) { ViewBag.Endereco = new Models.Endereco() { Descricao = consulta.@return.end, Complemento = consulta.@return.complemento, Bairro = consulta.@return.bairro, Cidade = consulta.@return.cidade, UF = consulta.@return.uf }; } return View(cep); }
O retorno vai ser exibido na mesma view que fizemos a consulta, utilizando o seguinte código:
Bem no resultado final temos o seguinte resultado:
Espero que a dica ajude no início da utilização do web service no .NET Core, até a próxima.
Exemplo
https://github.com/tborgesvieira/Web-Service-Client-Core
Referências
https://en.wikipedia.org/wiki/ASP.NET_Core
Artigo relacionado
Como consumir um Web Service no C#