Konfigurieren Sie die Wiederholungslogik in SqlClient

Gilt für: .NET Framework .NET .NET Standard

Herunterladen von ADO.NET

Dieser Artikel zeigt, wie man einen exponentiellen Wiederversuchsanbieter erstellt und ihn einem SqlConnectionzuweist. Der Provider versucht, die im Treiber integrierte Liste vorübergehender Verbindungsfehler zu überprüfen und die Verbindung bis zu fünfmal wiederherzustellen.

Voraussetzungen

  • Microsoft. Data.SqlClient 3.0 oder eine neuere Version.
  • Eine Verbindungszeichenfolge für SQL Server, Azure SQL-Datenbank, Azure SQL Managed Instance oder SQL-Datenbank in Microsoft Fabric.

Konfigurieren Sie einen Provider für Verbindungswiederholungen

  1. Definieren Sie die Optionen für den erneuten Versuch. TransientErrors als null belassen, damit der Anbieter die integrierte Liste vorübergehender Fehler verwendet.

    // Define the retry logic parameters
    var options = new SqlRetryLogicOption()
    {
        // Tries 5 times before throwing an exception
        NumberOfTries = 5,
        // Preferred gap time to delay before retry
        DeltaTime = TimeSpan.FromSeconds(1),
        // Maximum gap time for each delay time before retry
        MaxTimeInterval = TimeSpan.FromSeconds(20)
    };
    
  2. Erstellen Sie einen Anbieter aus den Optionen.

    // Create a retry logic provider
    SqlRetryLogicBaseProvider provider = SqlConfigurableRetryFactory.CreateExponentialRetryProvider(options);
    
  3. Weisen Sie den Anbieter zu, bevor Sie die Verbindung öffnen.

    // Assumes that connection is a valid SqlConnection object 
    // Set the retry logic provider on the connection instance
    connection.RetryLogicProvider = provider;
    // Establishing the connection will retry if a transient failure occurs.
    connection.Open();
    

NumberOfTries = 5 erlaubt einen ersten Versuch und bis zu vier Wiederholungen. Der exponentielle Anbieter erhöht das Abstand zwischen den Versuchen und fügt zufälligen Jitter hinzu. MaxTimeInterval begrenzt jede einzelne Verzögerung, nicht die gesamte vergangene Zeit aller Versuche.

Wiederholungsversuche für Befehle konfigurieren

Einen separaten Anbieter erstellen und SqlCommand.RetryLogicProvider zuweisen. Legen Sie SqlRetryLogicOption.AuthorizedSqlCondition auf ein Prädikat fest, das true nur für Kommandos zurückgibt, die Ihre Anwendung sicher wiederholen kann.

Vorsicht

Ein integrierter Anbieter führt einen Befehl nicht erneut aus, wenn für die Verbindung eine aktive Transaktion vorliegt. Wenn ein vorübergehender Fehler eine Transaktion ungültig macht, wird die gesamte Transaktion zurückgerollt und erneut versucht. Wiederholen Sie nicht nur die fehlgeschlagene Anweisung.

Die Einstellung SqlRetryLogicOption.TransientErrors ersetzt die eingebaute Fehlerliste des Treibers. Um die Basislinie zu erweitern, ohne die Standardwerte zu verlieren, siehe Erweiterung der integrierten transienten Fehlerliste.