Konfiguruj logikę retry w SqlClient

Dotyczy: .NET Framework .NET Standard

Pobieranie ADO.NET

Ten artykuł pokazuje, jak utworzyć dostawcę wykładniczego ponawiania prób i przypisać go do SqlConnection. Dostawca ponownie próbuje wpisać wbudowaną listę błędów połączeniowych sterownika i próbuje otworzyć połączenie do pięciu razy.

Wymagania wstępne

  • Microsoft. Data.SqlClient 3.0 lub nowsza wersja.
  • Parametry połączenia dla programu SQL Server, usługi Azure SQL Database, usługi Azure SQL Managed Instance lub bazy danych SQL w usłudze Microsoft Fabric.

Konfiguruj dostawcę powtórek połączeń

  1. Zdefiniuj opcje powtórek. Zostaw TransientErrors tak, null aby dostawca korzystał z wbudowanej listy błędów przejściowych.

    // 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. Stwórz dostawcę spośród dostępnych opcji.

    // Create a retry logic provider
    SqlRetryLogicBaseProvider provider = SqlConfigurableRetryFactory.CreateExponentialRetryProvider(options);
    
  3. Przydziel dostawcę przed otwarciem połączenia.

    // 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 pozwala na jedno podejście początkowe i maksymalnie cztery ponowne próby. Dostawca wykładniczy zwiększa interwał między próbami i dodaje losowe jitter. MaxTimeInterval Ogranicza maksymalną wartość każdego pojedynczego opóźnienia, a nie łączny czas dla wszystkich prób.

Skonfiguruj ponawianie poleceń

Stwórz osobnego dostawcę i przypisz go do SqlCommand.RetryLogicProvider. Ustaw SqlRetryLogicOption.AuthorizedSqlCondition na predykat, który zwraca true tylko dla poleceń, które aplikacja może bezpiecznie powtarzać.

Caution

Wbudowany dostawca nie próbuje ponownie wykonać polecenia, gdy połączenie ma aktywną transakcję. Jeśli przejściowa awaria unieważnia transakcję, cofnij się i spróbuj ponownie całą transakcję. Nie ponawiaj tylko instrukcji, która zakończyła się niepowodzeniem.

To ustawienie SqlRetryLogicOption.TransientErrors zastępuje wbudowaną listę błędów sterownika. Aby rozszerzyć linię bazową bez utraty domyślnych wartości, zobacz Rozszerzyj wbudowaną listę błędów przejściowych.