Konfiguruj logikę ponownych prób w SqlClient za pomocą pliku konfiguracyjnego

Dotyczy: .NET Framework .NET Standard

Pobieranie ADO.NET

Użyj pliku konfiguracji aplikacji, aby przypisać domyślnych dostawców ponawiania do każdego wystąpienia SqlConnection lub SqlCommand w ramach procesu. Bez tych sekcji lub przypisania dostawcy na poziomie obiektowym, SqlClient używa SqlConfigurableRetryFactory.CreateNoneRetryProvider i nie próbuje ponownie.

Sekcje konfiguracji

Zadeklaruj sekcje powtórek wewnątrz elementu configSections . Deklaracje sekcji muszą pojawić się przed odpowiadającymi wartościami konfiguracji.

  • SqlConfigurableRetryLogicConnection: Ustawia domyślnego dostawcę dla SqlConnection.
<section name="SqlConfigurableRetryLogicConnection"
        type="Microsoft.Data.SqlClient.SqlConfigurableRetryConnectionSection, Microsoft.Data.SqlClient"/>
  • SqlConfigurableRetryLogicCommand: Ustawia domyślnego dostawcę dla SqlCommand.
<section name="SqlConfigurableRetryLogicCommand"
        type="Microsoft.Data.SqlClient.SqlConfigurableRetryCommandSection, Microsoft.Data.SqlClient"/>

Sekcja połączeń

Ustaw domyślną logikę powtórek dla wszystkich SqlConnection instancji w aplikacji, używając następujących atrybutów:

  • numberOfTries: Ustala łączną liczbę prób, wliczając początkową operację. Ważny zakres to od 1 do 60.

  • deltaTime: Ustawia odstęp czasu jako obiekt TimeSpan.

  • minTime: Ustawia minimalny dozwolony odstęp czasu w postaci obiektu TimeSpan.

  • maxTime: Ustawia maksymalny dozwolony odstęp czasu w postaci obiektu TimeSpan.

  • transientErrors: Ustawia listę numerów błędów oddzielonych przecinkami do ponownego próbowania. Jeśli ją pominiesz, dostawca korzysta z wbudowanej listy błędów przejściowych. Jeśli to określisz, twoja lista zastępuje wbudowaną listę.

  • retryMethod: Określa twórcę metody retry, który odbiera konfigurację retry przez parametr SqlRetryLogicOption i zwraca SqlRetryLogicBaseProvider obiekt.

  • retryLogicType: Ustawia niestandardowego dostawcę logiki ponawiania, który zawiera konstruktory metod ponawiania określone przez retryMethod. Te metody muszą spełniać kryteria dla retryMethod. Używaj w pełni wykwalifikowanej nazwy dostawcy usług. Aby uzyskać więcej informacji, zobacz Określanie w pełni kwalifikowanych nazw typów.

Uwaga / Notatka

Nie musisz określać retryLogicType , kiedy korzystasz z wbudowanego dostawcy. Dostępne metody można znaleźć w artykule Wbudowani dostawcy logiki retry w SqlClient.

Sekcja poleceń

Ustaw domyślną logikę powtórek dla wszystkich SqlCommand instancji w aplikacji, używając atrybutów sekcji połączenia oraz następującego atrybutu specyficznego dla polecenia:

  • authorizedSqlCondition: Ustawia wyrażenie regularne, które musi się zgadzać, SqlCommand.CommandText zanim dostawca ponownie wykona polecenie. Jeśli wyrażenie się nie zgadza, polecenie uruchamia się raz bez logiki powtórki.

Uwaga / Notatka

W wyrażeniu regularnym rozróżniana jest wielkość liter. Uwzględnij opcję wbudowaną, taką jak (?i), gdy potrzebujesz dopasowania bez uwzględniania wielkości liter.

Przykłady

  • Próbuje nawiązać połączenie do trzech razy z przybliżonym 1-sekundowym opóźnieniem między próbami przy użyciu SqlConfigurableRetryFactory.CreateFixedRetryProvider metody i domyślnej listy błędów przejściowych:

    <SqlConfigurableRetryLogicConnection retryMethod ="CreateFixedRetryProvider"
                                            numberOfTries ="3" deltaTime ="00:00:01"/>
    
  • Próbuje nawiązać połączenie do pięciu razy z maksymalnie 45-sekundowym opóźnieniem między próbami przy użyciu SqlConfigurableRetryFactory.CreateExponentialRetryProvider metody i domyślnej listy błędów przejściowych:

    <SqlConfigurableRetryLogicConnection retryMethod ="CreateExponentialRetryProvider"
                        numberOfTries ="5" deltaTime ="00:00:03" maxTime ="00:00:45"/>
    
  • Próbuje wykonać polecenie do czterech razy z opóźnieniem od 2 do 30 sekund przy użyciu SqlConfigurableRetryFactory.CreateIncrementalRetryProvider metody i domyślnej listy błędów przejściowych:

    <SqlConfigurableRetryLogicCommand retryMethod ="CreateIncrementalRetryProvider"
                        numberOfTries ="4" deltaTime ="00:00:02" maxTime ="00:00:30"/>
    
  • Próbuje wykonać polecenie do ośmiu razy z opóźnieniem od jednej sekundy do jednej minuty. Ogranicza się do poleceń zawierających CommandText, słowo SELECT zapisane wielkimi literami oraz numery błędów 102 lub 997. Określenie transientErrors zastępuje wbudowaną listę, więc nie są powtarzane żadne inne błędy. W poniższym przykładzie użyto SqlConfigurableRetryFactory.CreateIncrementalRetryProvider:

    <SqlConfigurableRetryLogicCommand retryMethod ="CreateIncrementalRetryProvider"
                            numberOfTries ="8" deltaTime ="00:00:01" maxTime ="00:01:00"
                            transientErrors="102, 997"
                            authorizedSqlCondition="\b(SELECT)\b"/>
    

Uwaga / Notatka

W kolejnych dwóch przykładach można znaleźć kod źródłowy niestandardowej logiki ponawiania z artykułu Podstawowe interfejsy API konfigurowalnej logiki ponawiania w SqlClient. Zakłada się, że metoda CreateCustomProvider jest zdefiniowana w klasie CustomCRL_Doc.CustomRetry w zestawie CustomCRL_Doc.dll, który znajduje się w katalogu wykonywalnym aplikacji.

  • Próbuje nawiązać połączenie maksymalnie pięć razy, z opóźnieniem od 3 do 45 sekund, z numerami błędów 4060, 997 i 233 na liście oraz przy użyciu określonego niestandardowego dostawcy ponowień:

    <SqlConfigurableRetryLogicConnection retryLogicType ="CustomCRL_Doc.CustomRetry, CustomCRL_Doc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
                        retryMethod ="CreateCustomProvider"
                        numberOfTries ="5" deltaTime ="00:00:03" maxTime ="00:00:45"
                        transientErrors ="4060, 997, 233"/>
    
  • Ten przykład zachowuje się podobnie do poprzedniego:

    <SqlConfigurableRetryLogicConnection retryLogicType ="CustomCRL_Doc.CustomRetry, CustomCRL_Doc"
                        retryMethod ="CreateCustomProvider"
                        numberOfTries ="5" deltaTime ="00:00:03" maxTime ="00:00:45"
                        transientErrors ="4060, 997, 233"/>
    

Important

Pierwsze żądanie dla dowolnej ze skonfigurowanych wartości domyślnych powoduje, że SqlClient ładuje i buforuje zarówno dostawców połączeń, jak i poleceń. Zmiany w pliku konfiguracyjnym nie wpływają na żadnego z dostawców, dopóki proces nie zostanie wznowiony.

Błędy podczas odczytywania ustawień ponawiania nie powodują awarii aplikacji. SqlClient śledzi błąd konfiguracyjny i używa SqlConfigurableRetryFactory.CreateNoneRetryProvider, więc operacje są wykonywane bez powtórek.

Użyj śledzenia źródła zdarzeń, aby sprawdzić lub rozwiązać problemy z konfiguracją ponawiania. Aby uzyskać więcej informacji, zobacz Włączanie śledzenia zdarzeń w programie SqlClient.