IRONSOFTWAREHOME
MISES À JOUR POUR LES DÉVELOPPEURS

.NET Core Polly (Comment ça fonctionne pour les développeurs)

Jacob Mellor, Directeur technique @ Team Iron
Jacob Mellor
Updated: 28 juillet 2025

Polly est une bibliothèque de stratégies de résilience et de gestion des fautes transitoires pour .NET, permettant aux développeurs d'exprimer des politiques de résilience telles que la politique de réessai, les disjoncteurs, les délais d'attente, la politique d'isolation du cloisonnement, et la politique de secours. Polly cible ASP.NET Core, ce qui en fait un outil essentiel pour la résilience de .NET Core. Polly est sûr pour les threads et prend en charge la gestion de plusieurs requêtes concurrentes avec des réponses réussies.

Ce tutoriel fournira plus de détails sur la bibliothèque .NET de gestion des fautes transitoires, Polly, et comment l'utiliser avec IronPDF dans une application ASP.NET Core. Nous allons plonger dans chaque aspect de Polly, expliquer le fonctionnement du modèle de disjoncteur, discuter de l'isolation du cloisonnement et des délais d'attente, et montrer comment gérer des exceptions spécifiques ou des services défaillants avec des réponses d'échec de manière contrôlée et sûre pour les threads.

Politiques Polly

Les fautes transitoires se produisent souvent lorsque votre application essaie de se connecter à un service web via une requête HTTP, une base de données ou d'autres ressources externes. Ces fautes, comme les échecs de réseau, les problèmes temporaires de connectivité ou les délais d'attente, sont brèves et se corrigent généralement d'elles-mêmes après un court laps de temps.

Polly gère ces fautes transitoires en appliquant différentes stratégies et en exprimant des politiques telles que la politique de réessai, la politique de disjoncteur avancée, la politique de délai d'attente, la politique de secours, et la politique d'isolation du cloisonnement.

Politique de réessai

La politique de réessai relance automatiquement les requêtes concurrentes échouées en utilisant la logique de réessai. Elle peut être configurée pour réessayer indéfiniment ou effectuer des réessais automatiques un certain nombre de fois, et elle peut attendre un intervalle de temps défini entre les réessais ou utiliser une stratégie d'attente exponentielle.

Disjoncteur

La politique de disjoncteur permet à votre système de supporter un jeton d'annulation pour essayer un service particulier après un seuil prédéfini de requêtes échouées. La stratégie de disjoncteur est analogue à l'ingénierie du chaos ou à un navire fermant les portes étanches pour localiser les dégâts : une seule faute ne fera pas couler tout le navire.

Politique de délai d'attente

La politique de délai d'attente impose un temps maximum que peut exécuter un morceau de code de résilience .NET particulier. Elle se décline en deux versions : délai d'attente optimiste et délai d'attente pessimiste.

Politique de secours

La politique de secours est utilisée pour fournir une valeur ou un comportement de substitution en cas d'échec. Cette politique peut être utile lorsque le service défaillant ne doit pas arrêter l'ensemble du processus.

Isolation du cloisonnement

L'isolation du cloisonnement est utilisée pour limiter combien de requêtes concurrentes peuvent être effectuées sur une opération spécifique, limitant ainsi le potentiel d'épuisement des sockets et maintenant un nombre contrôlé de créneaux d'exécution.

Politique de cache

La politique de cache met en cache la réponse réussie d'une exécution afin que si la même exécution est invoquée à nouveau, Polly puisse renvoyer la valeur du cache distribué.

Enveloppement de politiques

Permet de regrouper plusieurs politiques ensemble, afin qu'elles puissent fonctionner comme une unité unique.

Créer et configurer des politiques

Politique de réessai

Une politique de réessai est simple : lorsqu'une exception spécifique ou une faute se produit, Polly essaiera d'exécuter à nouveau le délégué sous-jacent. Vous pouvez définir combien de fois réessayer, l'intervalle de temps entre les réessais, ou utiliser une stratégie de décélération exponentielle sinon il réessayera indéfiniment. Voici un exemple :

// Retry policy for handling HttpRequestException with exponential back-off
var retryPolicy = Policy
    .Handle<HttpRequestException>()
    .WaitAndRetryAsync(3, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)), 
    (exception, timeSpan, retryCount, context) =>
    {
        // This is the OnRetry delegate, where you can log or monitor failed requests
        Console.WriteLine($"Retry {retryCount} after {timeSpan}. Exception: {exception.Message}");
    });

Politique de disjoncteur

La politique de disjoncteur permet à la bibliothèque Polly de surveiller les fautes, et si le nombre de fautes dépasse un seuil configuré dans une période spécifiée, le circuit est "cassé", et d'autres requêtes sont bloquées pendant un temps spécifié. Cela s'appelle l'état 'ouvert'. Après ce temps, le circuit entre dans un état 'semi-ouvert', où il permet à un peu de trafic de vérifier la santé du service particulier. Si ces requêtes sont réussies et qu'aucune faute ne se produit, le circuit se referme; sinon, il s'ouvre à nouveau.

// Circuit breaker policy to handle failing requests with open and half-open states
var circuitBreakerPolicy = Policy
    .Handle<HttpRequestException>()
    .CircuitBreakerAsync(5, TimeSpan.FromMinutes(1));

Politique de délai d'attente

Les politiques de délai d'attente gèrent les scénarios où un service ne répond pas dans un délai raisonnable. Polly propose deux types de délais d'attente : Optimiste et Pessimiste. Un délai d'attente optimiste fonctionne sur un fil séparé et annule l'opération sous-jacente via un CancellationToken. Un délai d'attente pessimiste bloque le fil parent jusqu'à ce que l'opération se termine ou que la période de délai d'attente s'écoule.

// Timeout policy with a 30-second optimistic timeout
var timeoutPolicy = Policy.TimeoutAsync(30); // 30 seconds

Isolation du cloisonnement

L'isolation par cloisonnement est utilisée pour limiter le nombre d'actions concurrentes contre un service particulier. Elle fournit un moyen d'isoler les fautes et d'empêcher qu'elles se propagent. Elle limite également la charge que nous imposons à nos dépendances.

// Bulkhead isolation policy to limit concurrency and queue length
var bulkheadIsolationPolicy = Policy.BulkheadAsync(10, 20); // 10 concurrent actions, 20 queue slots

Politique de secours

Les politiques de secours sont utiles lorsque vous devez fournir un comportement par défaut ou une valeur de substitution lorsque tout le reste échoue.

// Fallback policy to provide a default result on failure
var fallbackPolicy = Policy
    .Handle<Exception>()
    .FallbackAsync<FallbackResult>(
        FallbackResult.SomethingWentWrong, 
        (exception, context) => 
        {
            Console.WriteLine($"Fallback triggered due to: {exception.Message}");
            return Task.CompletedTask;
        });

Enveloppement des politiques

Plusieurs politiques peuvent être combinées de manière flexible en utilisant un PolicyWrap :

// Combining multiple policies using PolicyWrap
var policyWrap = Policy.WrapAsync(fallbackPolicy, retryPolicy, circuitBreakerPolicy, timeoutPolicy, bulkheadIsolationPolicy);

Commencer

Pour commencer à utiliser Polly avec IronPDF, assurez-vous d'avoir installé Visual Studio et de créer un nouveau projet d'application console dans .NET Core. Ouvrez la console du gestionnaire de packages NuGet dans Visual Studio et installez les packages Polly et IronPDF :

PM > Install-Package Polly

PM > Install-Package IronPdf

Utiliser Polly avec IronPDF pour convertir une URL en PDF

Une fonctionnalité importante d'IronPDF est sa capacité de conversion HTML en PDF, garantissant que les mises en page et les styles sont intacts. Cette fonction transforme le contenu web en PDF, ce qui est parfait pour les rapports, les factures et la documentation. Elle prend en charge la conversion de fichiers HTML, d'URL, et de chaînes HTML en PDF.

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}

Passons en revue un exemple d'utilisation de Polly avec IronPDF pour convertir une URL en PDF. Supposons que nous ayons un service web qui échoue occasionnellement en raison de fautes transitoires, et nous voulons gérer ces défaillances de manière élégante en utilisant Polly.

Tout d'abord, importons les espaces de noms nécessaires dans notre fichier Program.cs :

using System;
using System.Threading.Tasks;
using Polly;
using Polly.Wrap;
using IronPdf;

Ensuite, nous définirons nos politiques. Dans cet exemple, nous utiliserons une combinaison de politiques de réessai et de disjoncteur pour gérer les échecs :

// Retry policy with exponential backoff
var retryPolicy = Policy
    .Handle<Exception>()
    .WaitAndRetryAsync(3, i => TimeSpan.FromSeconds(2 * i));

// Circuit breaker policy to block requests after consecutive failures
var circuitBreakerPolicy = Policy
    .Handle<Exception>()
    .CircuitBreakerAsync(2, TimeSpan.FromSeconds(30));

Le retryPolicy réessayera la demande échouée jusqu'à trois fois avec une stratégie de recouvrement exponentiel, en attendant 2 secondes, 4 secondes et 8 secondes entre les tentatives. Le circuitBreakerPolicy ouvrira le circuit si deux échecs consécutifs se produisent dans un intervalle de temps de 30 secondes.

Maintenant, définissons notre code IronPDF pour convertir une URL en PDF :

var htmlToPdf = new ChromePdfRenderer();
var pdfBytes = await retryPolicy
    .WrapAsync(circuitBreakerPolicy)
    .ExecuteAsync(async () =>
    {
        Console.WriteLine("Attempting to convert URL to PDF...");
        var result = await htmlToPdf.RenderUrlAsPdfAsync("https://example.com");
        Console.WriteLine("Conversion successful!");
        return result;
    });

pdfBytes.SaveAs("output.pdf");

Dans le code exemple ci-dessus, nous enveloppons notre retryPolicy et circuitBreakerPolicy en utilisant la méthode WrapAsync. Cela nous permet d'appliquer plusieurs politiques aux nouvelles requêtes séquentiellement. La méthode ExecuteAsync exécute le délégué fourni, qui dans ce code est la méthode RenderUrlAsPdfAsync de IronPDF.

En appliquant les politiques de Polly, nous nous assurons que notre code est résilient aux fautes transitoires. Si une requête échoue, Polly la réessaiera automatiquement selon la politique de réessai. Si le nombre d'échecs consécutifs dépasse le seuil préconfiguré, la politique de disjoncteur ouvrira le circuit, empêchant d'autres requêtes pendant une durée spécifiée.

Cas de test pour les politiques Polly

Pour tester l'efficacité de nos politiques Polly, simulons quelques requêtes échouées. Modifiez l'URL en un point de terminaison inexistant et ajoutez quelques cas de test :

var testUrls = new[]
{
    "https://ironpdf.com",
    "https://notexistingdomain.com/",
    "http://httpbin.org/delay/120"
};

foreach (var url in testUrls)
{
    try
    {
        var pdfBytes = await retryPolicy
            .WrapAsync(circuitBreakerPolicy)
            .ExecuteAsync(() => htmlToPdf.RenderUrlAsPdfAsync(url));

        pdfBytes.SaveAs($"{Guid.NewGuid()}.pdf");
        Console.WriteLine($"Successfully converted {url} to PDF.");
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Failed to convert {url} to PDF: {ex.Message}");
    }
}

Dans le code ci-dessus, nous parcourons un ensemble d'URLs de test et tentons de convertir chacune d'elles en PDF. Si une requête échoue, l'exception sera capturée et un message approprié s'affichera dans la console.

.NET Core Polly (Comment ça fonctionne pour les développeurs) : Figure 1 - Sortie URL vers PDF

Conclusion

Polly est une bibliothèque puissante et flexible pour implémenter la résilience et la gestion des fautes transitoires dans les applications .NET Core. En combinant des politiques de réessai et de disjoncteur, les développeurs peuvent construire des systèmes robustes et tolérants aux fautes qui gèrent les défaillances avec élégance.

Dans ce tutoriel, nous avons exploré comment utiliser Polly avec IronPDF pour convertir une URL en PDF. Nous avons appris à définir et appliquer les politiques Polly, y compris le réessai et le disjoncteur. Nous avons également testé nos politiques avec différentes URLs. Nous pouvons également le faire pour convertir du HTML en PDF.

IronPDF offre un essai gratuit, et les licences commencent à des prix compétitifs, vous permettant de tirer parti de ses capacités dans vos projets.

Jacob Mellor, Directeur technique @ Team Iron
Directeur technique

Jacob Mellor est directeur de la technologie chez Iron Software et un ingénieur visionnaire pionnier de la technologie C# PDF. En tant que développeur à l'origine de la base de code centrale d'Iron Software, il a façonné l'architecture des produits de l'entreprise depuis sa création, la transformant aux côtés du PDG Cameron Rimington en une entreprise de plus de 50 personnes au service de la NASA, de Tesla et d'agences gouvernementales mondiales.

...
Lire la suite

Articles connexes

Key in blue circle

Obtenez votre clé d'essai de 30 jours instantanément.

Your trial license will be sent to your email address

Aucune restriction. 100 % débloqué. Pas de carte bancaire.

bullet_checkedAucune carte de crédit ou création de compte requiseAucune restriction. 100 % débloqué. Pas de carte bancaire.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Réservez votre Démonstration en direct gratuite
Booking Badge

De confiance par des millions d'ingénieurs dans le monde entier

Logos des clients d'Iron Software
Obtenez Votre Consultation sans Engagement
Remplissez le formulaire ci-dessous ou envoyez un email à sales@ironsoftware.com
Vos informations seront toujours gardées confidentielles.
De confiance par des millions d'ingénieurs dans le monde entier
Logos des clients d'Iron Software
Obtenez votre clé d'essai 30 jours gratuitement.
Aucune carte de crédit ou création de compte requise