Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Índice:


       

Índice
exclude.*ndice:

Objetivo:


       Esta página tem por objetivo demonstrar como é feito o uso Middleware.

Snowden AspNetCore:


       Esta biblioteca fornecida pelo Snowden disponibiliza um meio para que aplicações desenvolvidas em

Estado
titleAsp.Net 5
consigam fazer a integração facilitada. Fornecendo operações para gravar qualquer _Exception_ não tratada pelos _controllers_ e gravando também respostas selecionadas com base em seu status.

       Apesar do nome

Estado
titleAspNetCore
, ela também funciona no
Estado
title.Net
a partir da versão
Estado
title4.7.1
, desde que a mesma esteja utilizando a versão do
Estado
titleAsp.Net 5

Como Funciona:


       Esta biblioteca funciona adicionando middlewares na pilha de execução de sua aplicação. Então toda requisição terá uma interação com esses middlewares, podendo assim capturar exceptivosexceptions ainda não tratados nos controllers ou mesmo pegar o conteúdo da requisição ou resposta.

Get Started:


       Com uma nova aplicação em

Estado
titleAspNetCore
, vamos adicionar as dependências e configurar o uso do Snowden, para isso vamos editar o arquivo de
Estado
titleStartup.cs
gerado.

       Na parte de configuração de serviços (

Estado
titleConfigureServices
) vamos adicionar o Snowden no injetor de dependências e configura-lo. Então vamos utilizar o namespace 
Estado
titleTotvs.Snowden.ClientApi.AspNetCore
que contem extensões facilitadoras para isso. Vejamos exemplo abaixo:

Bloco de código
languagec#
public void ConfigureServices(IServiceCollection services)
{
    // Configuramos o snowden
    services.AddSnowden(config =>
    {
        // ambiente que se encontra a aplicação
        config.Environment = EnvironmentDefaultNames.Test;

        // Definições da aplicação
        config.Application.Name = "snowden-aspnetcore";
        config.Application.ProductLine = "snowden-samples";
        config.Application.Version = typeof(Startup).Assembly.GetName().Version.ToString();

        // authenticação com os servidores do snowden
        config.Credentials.Key = "tRaIsWygt2hKAubGk4EjSrGACDsa";
        config.Credentials.Secret = "7MpWYUzesrLkAgyoIze3i7rffFYa";

        // Definimos um totvsId Padrão
        // pode ser resolvido em tempo de execução implementando
        // ISnowdenAspNetCoreClientResolver e registrando. ex:
        // `config.Services.ClientResolver = typeof(MyType);`
        config.TotvsId = "03745af30a384000908D1fc02f6a5240";
                
        // Se desejamos logar qualquer exception enviada pelo sistema
        config.Log.Exceptions = true;

        // Logar as respostas com os seguintes status
        // ALERTA: Esta operação pode degradar o sistema
        // pois ela demanda utilizar stream em memoria do
        // resultado do objeto.
        config.Log.ResponseStatusCode = SnowdenClientApiAspNetCoreOptionsLog.ServerFaultStatuses;
    });

    services.AddMvc();
}

       Vemos acima que estamos configurando diversas informações do Snowden, incluindo dados da aplicação que está executando; Credenciais de autenticação com o Snowden; Cliente da operação (a seguir será mostrado como resolve-lo dinamicamente); E também onde deve ser gravado;

       Até agora tudo que fizemos foi adicionar as dependências do Snowden e configura-las. Agora vamos adicionar o Snowden na pilha de execução da aplicação. Nas configurações da aplicação (

Estado
titleConfigure
), também utilizando do namespace
Estado
titleTotvs.Snowden.ClientApi.AspNetCore
, vamos utilizar outro facilitador. Vejamos abaixo:

Bloco de código
languagec#
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    // O snowden é registrado antes da exception ser tratada
    // o snowden também esta pegando o ultimo estado da resposta
    app.UseSnowden();

    app.UseMvc();
}

       Com isso nossa aplicação já se encontra integrada com o Snowden, a partir de agora qualquer

Estado
titleException
não tratada será gravada. Como configurado, também estaremos gravando qualquer resposta que pertença ao grupo de falhas de servidor (faixa 500).

       Observem também que adicionamos o Snowden logo antes do uso do MVC, isso está diretamente ligado ao funcionamento da middlewares para que ela seja capaz de capturar a  ele deve ser o primeiro na pilha de tratamento, para isso registramos ele posteriormente a qualquer tratamento de exceptions, assim ele é o primeiro a tratar qualquer exception lançada. Segue abaixo uma leitura sugerida para melhor entendimento:   

Identificação do Cliente em Tempo de Execução:


       Para identificarmos o cliente em tempo de execução temos que implementar a interface 

Estado
titleISnowdenAspNetCoreClientResolver
localizada em
Estado
titleTotvs.Snowden.ClientApi.AspNetCore.Services
, essa apenas requer a implementação de um único método que recebe o contexto da requisição e deve retornar o TotvsId.

Bloco de código
languagec#
public class CustomClientResolver : ISnowdenAspNetCoreClientResolver
{
    public string GetTotvsId(HttpContext context)
    {
        return "03745af30a384000908D1fc02f6a5240";
    }
}

       Após implementar a classe, devemos adicionar nossa implementação no container de injeção de dependências, e configurar para o Snowden utilizar nossa implementação. Para isso dentro das opções do Snowden temos a opção

Estado
titleServices
, essa possui a propriedade "ClientResolver" que recebe o tipo que irá fazer a resolução do cliente.

Bloco de código
languagec#
public void ConfigureServices(IServiceCollection services)
{
    // Adicionamos nossa implementação de resolução de clientes no DI
    services.AddScoped(typeof(CustomClientResolver));

    // Configuramos o Snowden
    services.AddSnowden(config =>
    {
        config.Environment = EnvironmentDefaultNames.Test;
        config.Application.Name = "snowden-aspnetcore";
        config.Application.ProductLine = "snowden-samples";
        config.Application.Version = typeof(Startup).Assembly.GetName().Version.ToString();
        config.Credentials.Key = "tRaIsWygt2hKAubGk4EjSrGACDsa";
        config.Credentials.Secret = "7MpWYUzesrLkAgyoIze3i7rffFYa";

        // Resolver que irá identificar o cliente em tempo de execução
        config.Services.ClientResolver = typeof(CustomClientResolver);                
    });

    services.AddMvc();
}
Informações
iconfalse
Informações
iconfalse

Produto: Framework

Informações
iconfalse

Versão: 12.1.20

Informações
iconfalse

Processo: Uso do Middleware

Informações
iconfalse
Informações
iconfalse

Status: Finalizado

Informações
iconfalse

Data:  

Informações
iconfalse

Autores:

FERNANDO FERREIRA

GABRIEL DIAS DE OLIVEIRA

Gustavo Henrique de Matos

Karina Dos Santos Costa

Rogerio De Resende Ohashi