Gestire le chiamate a servizi esterni in ASP.NET Core e Blazor tramite Polly

di Morgan Pizzini, in ASP.NET Core,

Durante questi anni abbiamo parlato più volte della libreria Polly in ASP.NET, ma data l'evoluzione del framework, passando rapidamente dalla versione 3 alla 5, per poi arrivare all'odierno ASP.NET Core 6 è bene focalizzarci nuovamente sul suo utilizzo, con un occhio sia a nuove funzionalità o differenze implementative, sia al supporto a Blazor. In questo articolo proporremo vari scenari, spaziando dall'utilizzo di Polly per la gestione di chiamate HTTP, ad interrogazione di servizi generici, arrivando infine a vederne l'implementazione all'interno di Blazor.

Polly è una libreria che permette di implementare policy: regole per effettuare azioni in base alla richiesta verso un servizio o al suo risultato. Tali policy hanno lo scopo di rendere il nostro codice più robusto e affidabile. Scriveremo per esempio una strategia per gestire un endpoint non più funzionante, un servizio con problemi di reperibilità e intercettare errori che potrebbero interferire con il corretto funzionamento della nostra applicazione. Una delle principali, e conosciute, funzionalità a disposizione è retries with exponential backoff, tanto per citarne una: permette, in caso di fallimento del metodo chiamato, di riprovare fino a che non si ottenga un risultato positivo o ad un massimo di chiamate o condizioni. Nel corso delle prime pagine di questo articolo vedremo come sfruttare Polly per implementarla, e come via via modificarne, anche in maniera radicale, il comportamento, per realizzare logiche sempre più complesse.

Per i nostri esempi prenderemo in considerazione policy applicate ad un istanza di HttpClient all'interno di un'applicazione ASP.NET Core WebAPI in modo tale da creare un endpoint che possa fallire in base a condizioni prestabilite. L'operazione non è complessa, e potremmo utilizzare la stessa applicazione che stiamo sviluppando, creando un Controller in cui inserire la seguente action.

private static int counter = 0;
[HttpGet]
public ActionResult Get()
{
    switch(++counter % 4){
        case 0:
            return Ok(counter);
        case 1:
            return StatusCode(501);
        case 2:
            return StatusCode(502);
        default:
            return StatusCode(503);
    }
}

Il codice permette di tenere sotto controllo il feedback dell'endpoint, dandoci la possibilità di controllare la correttezza della configurazione di Polly.

Installazione e prima configurazione

Come ogni progetto .NET procediamo installando le librerie necessarie tramite NuGet:

Figura 1

Se, come nel nostro caso, stiamo applicando policy su HttpClient, possiamo referenziare anche il package Microsoft.Extensions.Http.Polly, il quale contiene alcuni extension method che faciliteranno la creazioni di policy per comunicazione Http. Una volta installato tutto il necessario possiamo spostarci all'interno di Program.cs per configurare l'HttpClient che utilizzeremo per effetture le chiamate.

builder.Services.AddHttpClient("SampleHttpClient", client =>
{
    client.BaseAddress = new Uri("https://localhost:8080/");
    client.DefaultRequestHeaders.Add("Accept", "application/json");
});
7 pagine in totale: 1 2 3 4 5 6 7
Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

Top Ten Articoli

Articoli via e-mail

Iscriviti alla nostra newsletter nuoviarticoli per ricevere via e-mail le notifiche!

In primo piano

I più letti di oggi

In evidenza

Misc