Como consumir um Web Service no .NET Core

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">
      @Html.ValidationSummary(true, "", new { @class = "text-danger" })
      @Html.TextBoxFor(m => 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 => 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#

Posted in .NET, .NET Core, Blog and tagged .

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *