Obtendo cotação do dólar através de uma aplicação ASP NET com Hangfire

Neste post mostro como utilizar o SQL Server Integration Services para obter a cotação de fechamento do dólar (D -1) a partir de um serviço disponibilizado pelo Banco Central do Brasil.

Acontece que esta solução fica restrita a utilizadores do banco de dados Microsoft SQL Server. Neste post vou mostrar como obter a cotação do dólar a partir de uma aplicação ASP NET MVC utilizando o Hangfire.

Para quem não conhece o Hangfire é um framework de código aberto que ajuda você a criar, processar e gerenciar jobs em segundo plano. Sua utilização é simples e requer apenas a instalação do pacote nuget. Para conhecer mais detalhes veja aqui.

Apresentações feitas vamos colocar a mão na massa….

Vamos desenvolver uma aplicação bem simples somente para demonstrar o funcionamento do hangfire e pegar a cotação do dólar utilizando o web service do banco central do Brasil.
O primeiro passo é criar uma nova aplicação ASP NET MVC. Neste exemplo poderia utilizar um projeto ASP NET Core, mas decidi utilizar NET Framework para que esta solução possa atender soluções legadas. É possível desenvolver este projeto com ASP NET Core e para isto, basta adicionar a referencia ao serviço utilizando Connected Services.

Com o novo projeto criado adicione o Hangfire ao projeto utilizando o gerenciador de pacotes Nuget

Crie um banco de dados chamado hangfire (ou outro nome que desejar). Neste exemplo estou usando uma instancia local do sqlserver 2017.

Efetue a configuração do Hangfire no arquivo Startup.cs conforme abaixo:

Para testar se o Hangfire está funcionando, execute o projeto e digite a url http://localhost:{porta}/hangfire, onde, o valor {porta} é a porta que foi associada pelo Visual Studio a sua aplicação web. Se tudo foi instalado corretamente você irá ver uma página como abaixo:

ATENÇÃO
Quando você faz uma execução do hangfire local, não é necessário efetuar nenhuma autenticação para acessar o dashboard. Ao colocar esta aplicação em um servidor web é necessário implementar a autenticação por razões de segurança, afinal, você não quer ninguém “xeretando” os seus jobs. Veja como implementar a autenticação aqui http://docs.hangfire.io/en/latest/configuration/using-dashboard.html

Agora vamos adicionar a referência ao serviço do Banco Central. Não vou entrar em detalhes do funcionamento deste web service. Neste post eu entro em mais detalhes sobre o funcionamento deste serviço.

O primeiro passo é adicionar a referência ao serviço. Clique com o botão direto no projeto CotacaoDolar vá nas opções Add… > Service Reference…
Na janela que abrir clique no botão “Advanced” no canto inferior esquerdo e em seguida no botão “Add Web Reference”


Nesta janela vamos colocar o endereço do WSDL https://www3.bcb.gov.br/sgspub/JSP/sgsgeral/FachadaWSSGS.wsdl no campo URL e em seguida clique em “Add Refence”Se tudo ocorreu bem até aqui você irá ver dentro da pasta “Web References” a referencia ao serviço adicionado.

Buscando dados do web services e configurando o job do hangfire

Abra o HomeController e crie um método chamado AddSchedule. Esse método será responsável por “schedular” o job do hangfire que irá executar diariamente (Cron.Daily veja mais informações aqui).

Vamos criar o método GetDollarQuotation que é chamado pelo AddSchedule:

Há um trecho de código comentado. Este trecho você pode utilizar caso esteja em uma rede com proxy. O código comentado faz a autenticação no proxy antes de fazer a requisição.

Execute a aplicação e para agendar o job e acesse a url http://localhost:{porta}/AddSchedule e em seguida acesse a página http://localhost:{porta}/hangfire. Observe que que o menu Recurring Jobs agora possui 1 job agendado para execução.

Para armazenar estas informações em um banco de dados, por exemplo, basta alterar o método GetDollarQuotation para ao invés de retornar o valor da cotação armazenar este valor em uma tabela.

O código completo da aplicação está disponível no meu github: https://github.com/tiagocrizanto/CotacaoDolar