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 "AspNetCore"

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_ middlewares na pilha de execução de sua aplicação. Então toda requisição terá uma interação com esses _middlewares_, podendo  podendo assim capturar _exceptivos_ exceptions ainda não tratados nos _controllers_ controllers ou mesmo pegar o conteúdo da requisição ou resposta.

Configuração

Get Started:


       Com uma nova aplicação em `Asp Net Core`

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

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

Estado
titleConfigureServices
) vamos adicionar o Snowden no injetor de dependências e configura-lo. Então vamos utilizar o _namespace_ `Totvs namespace 
Estado
titleTotvs.Snowden.ClientApi.
AspNetCore`
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 ('Configure'

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 'Exception"

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 middlewares para que ela seja capaz de capturar a _exception_  ele 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_ "ISnowdenAspNetCoreClientResolver" localizada em "

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 "Services'

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