ASP.NET Core: dicas úteis para o dia a dia de um Desenvolvedor - Parte 2
Neste post retomo a série de dicas úteis para o dia a dia de Desenvolvedores ASP.NET Core. Caso ainda não tenha consultado o primeiro artigo ou, até mesmo, gostaria de revê-lo acesse o link a seguir:
ASP.NET Core: dicas úteis para o dia a dia de um Desenvolvedor - Parte 1
Se você chegou até aqui e tem interesse em conhecer mais sobre o desenvolvimento de soluções Web utilizando o Azure, aproveito este espaco para mais um convite… Que tal aprender mais sobre a nuvem Microsoft, em um workshop que acontecerá durante um sábado (dia 21/09) em São Paulo Capital e implementando na prática um case que combina o uso de tecnologias como Azure App Service, Azure SQL, Azure Storage, Azure Functions e Application Insights? Acesse então o link a seguir para efetuar sua inscrição com um desconto especial: http://bit.ly/anp-dicas-aspnet
Definindo a versão do .NET Core utilizada pelo comando dotnet new
Com o .NET Core temos a possibilidade de instalação de diferentes versões de SDKs numa mesma máquina. Há contudo uma limitação: que versão o .NET Core CLI (Command-Line Interface) utilizará como default quando solicitarmos a criação de um novo projeto?
O comando dotnet new assumirá como padrão a versão mais recente instalada para o .NET Core. Mas e se precisarmos então gerar novos projetos via linha de comando, tomando como base um release anterior?
Felizmente podemos solucionar isto através da criação de um arquivo global.json em um diretório a partir do qual serão gerados novos projetos. Já abordei inclusive isto no seguinte artigo:
.NET Core: definindo a versão do SDK utilizada pelo comando dotnet new
Na imagem a seguir é possível constatar que o comando dotnet --version retornou primeiramente a versão 3 do .NET Core (ainda em Preview), ao passo que dentro do diretório C:\ASP.NET Core 2.2\ foi assumido o .NET Core 2.2 graças à existência de um arquivo global.json no mesmo:
Health Checks no ASP.NET Core 2.2
A implementação de uma Action customizada que será acessada para fins de monitoramento costuma ser uma prática comum em aplicações ASP.NET. Isto geralmente envolve checagens executadas com o intuito de determinar se o projeto em questão se encontra dentro de seu status normal de funcionamento.
O ASP.NET Core 2.2 conta agora com um novo mecanismo de Health Check que simplifica este tipo de verificação. A ativação deste recurso envolve as seguintes alterações na classe Startup:
- A chamada ao método AddHealthChecks em ConfigureServices;
- A ativação do middleware de Health Check, com a invocação do método UseHealthChecks (informando um caminho para acesso) em Configure.
Um teste acessando o endereço https://localhost:5001/status via Postman trará como retorno o código HTTP 200 (OK), além da mensagem de texto contendo o valor Healthy:
Mais um pouco sobre Health Checks e o ASP.NET Core 2.2: verificando a disponibilidade de um banco de dados
O projeto Xabaril/AspNetCore.Diagnostics.HealthChecks traz uma série de extensões para o ASP.NET Core 2.2, de forma a simplificar a implementação de Health Checks envolvendo verificações de disponibilidade de bancos de dados.
No exemplo descrito nessa seção foi adicionado o package AspNetCore.HealthChecks.SqlServer ao projeto, com uma alteração acontecendo na classe Startup. O método AddSqlServer foi acionado logo após a chamada a AddHealthChecks, recebendo como parâmetro a Connection String da base a ser testada (BaseCotacoes):
Um teste com o servidor de bancos de dados indisponível retornará o código de erro HTTP 503 (Service Unavailable), além da mensagem Unhealthy:
Formatando a resposta dos Health Checks no ASP.NET Core 2.2
Ao invocar o método UseHealthChecks no método Configure da classe Startup temos ainda a opção de informar como parâmetro uma instância do tipo HealthCheckOptions (namespace Microsoft.AspNetCore.Diagnostics.HealthChecks), a qual permitirá formatar o retorno do middleware de Health Check com informações como o status geral da aplicação e a situação de cada checagem previamente configurada:
A seguir temos o retorno para uma situação normal da aplicação:
E a resposta quando da indisponibilidade do banco de dados:
Implementando Load Balancing com Nginx
O Nginx pode ser uma opção extremamente simples e eficiente para a implementação de mecanismos de Load Balancing em aplicações ASP.NET Core de médio e pequeno porte, sobretudo se utilizado em conjunto com tecnologias como Docker e Docker Compose. No artigo a seguir demonstro tudo isso através de um exemplo prático:
ASP.NET Core 2.2: implementando Load Balancing com Nginx, Docker e Docker Compose