Konfiguration der SqlClient-Wiederholungslogik mit einer Konfigurationsdatei

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

Herunterladen von ADO.NET

Verwenden Sie eine Anwendungskonfigurationsdatei, um jeder SqlCommand- oder SqlConnection-Instanz im Prozess Standard-Wiederholungsanbieter zuzuweisen. Ohne diese Abschnitte oder eine Providerzuweisung auf Objektebene verwendet SqlClient SqlConfigurableRetryFactory.CreateNoneRetryProvider und führt keinen erneuten Versuch aus.

Konfigurationsabschnitte

Deklariere die Wiederholungsabschnitte innerhalb des Elements configSections . Abschnittsdeklarationen müssen vor den entsprechenden Konfigurationswerten erscheinen.

  • SqlConfigurableRetryLogicConnection: Setzt den Standardanbieter für SqlConnection.
<section name="SqlConfigurableRetryLogicConnection"
        type="Microsoft.Data.SqlClient.SqlConfigurableRetryConnectionSection, Microsoft.Data.SqlClient"/>
  • SqlConfigurableRetryLogicCommand: Setzt den Standardanbieter für SqlCommand.
<section name="SqlConfigurableRetryLogicCommand"
        type="Microsoft.Data.SqlClient.SqlConfigurableRetryCommandSection, Microsoft.Data.SqlClient"/>

Verbindungsabschnitt

Setzen Sie die Standard-Wiederholungslogik für alle SqlConnection Instanzen in der Anwendung mit den folgenden Attributen:

  • numberOfTries: Legt die Gesamtzahl der Versuche fest, einschließlich der Anfangsoperation. Der gültige Bereich liegt zwischen 1 und 60.

  • deltaTime: Legt das Zeitintervall der Lücke als TimeSpanObjekt fest.

  • minTime: Legt das erlaubte minimale Lückenzeitintervall als Objekt TimeSpan fest.

  • maxTime: Setzt das erlaubte maximale Gap-Time-Intervall als Objekt TimeSpan .

  • transientErrors: Legt eine kommagetrennte Liste von Fehlernummern fest, für die ein erneuter Versuch unternommen werden soll. Wenn du sie weglässt, verwendet der Anbieter die eingebaute Liste der vorübergehenden Fehler. Wenn du es angibst, ersetzt deine Liste die eingebaute Liste.

  • retryMethod: Spezifiziert einen Retry-Method-Ersteller, der die Retry-Konfiguration über einen Parameter SqlRetryLogicOption empfängt und ein SqlRetryLogicBaseProvider Objekt zurückgibt.

  • retryLogicType: Legt einen benutzerdefinierten Provider für die Wiederholungslogik fest, der die durch retryMethod identifizierten Ersteller von Wiederholungsmethoden enthält. Diese Methoden müssen die Kriterien für retryMethoderfüllen. Verwenden Sie den vollständig qualifizierten Typennamen des Anbieters. Weitere Informationen finden Sie unter Angeben vollqualifizierter Typnamen.

Hinweis

Du musst nicht angeben retryLogicType , wann du einen integrierten Anbieter nutzt. Für die verfügbaren Methoden siehe Integrierte Wiederhollogik-Anbieter in SqlClient.

Befehlsabschnitt

Legen Sie die Standardlogik für Wiederholungsversuche für alle SqlCommand-Instanzen in der Anwendung fest, indem Sie die Attribute des Verbindungsabschnitts und das folgende befehlsspezifische Attribut verwenden:

  • authorizedSqlCondition: Legt einen regulären Ausdruck fest, mit dem SqlCommand.CommandText übereinstimmen muss, bevor der Anbieter die Ausführung des Befehls erneut versucht. Wenn der Ausdruck nicht übereinstimmt, wird der Befehl einmal ohne Wiederholungslogik durchgeführt.

Hinweis

Beim regulären Ausdruck muss die Groß-/Kleinschreibung beachtet werden. Fügen Sie eine Inline-Option wie (?i) ein, wenn Sie einen Abgleich ohne Unterscheidung zwischen Groß- und Kleinschreibung benötigen.

Beispiele

  • In diesem Beispiel wird versucht, mithilfe der Methode SqlConfigurableRetryFactory.CreateFixedRetryProvider und der Standardliste von vorübergehenden Fehlern eine Verbindung bis zu drei Mal mit einer ungefähren Verzögerung von 1 Sekunde zwischen den einzelnen Versuchen herzustellen:

    <SqlConfigurableRetryLogicConnection retryMethod ="CreateFixedRetryProvider"
                                            numberOfTries ="3" deltaTime ="00:00:01"/>
    
  • In diesem Beispiel wird versucht, mithilfe der Methode SqlConfigurableRetryFactory.CreateExponentialRetryProvider und der Standardliste von vorübergehenden Fehlern eine Verbindung bis zu fünf Mal mit einer ungefähren Verzögerung von 45 Sekunden zwischen den einzelnen Versuchen herzustellen:

    <SqlConfigurableRetryLogicConnection retryMethod ="CreateExponentialRetryProvider"
                        numberOfTries ="5" deltaTime ="00:00:03" maxTime ="00:00:45"/>
    
  • In diesem Beispiel wird versucht, mithilfe der Methode SqlConfigurableRetryFactory.CreateIncrementalRetryProvider und der Standardliste von vorübergehenden Fehlern einen Befehl bis zu vier Mal mit einer Verzögerung zwischen 2 und 30 Sekunden auszuführen:

    <SqlConfigurableRetryLogicCommand retryMethod ="CreateIncrementalRetryProvider"
                        numberOfTries ="4" deltaTime ="00:00:02" maxTime ="00:00:30"/>
    
  • In diesem Beispiel wird versucht, einen Befehl bis zu acht Mal mit einer Verzögerung von einer Sekunde bis einer Minute auszuführen. Es ist beschränkt auf Befehle, bei denen CommandText das großgeschriebene Wort SELECT und die Fehlernummern 102 oder 997 enthält. Die Angabe transientErrors ersetzt die eingebaute Liste, sodass keine weiteren Fehler wiederholt werden. Im folgenden Beispiel wird SqlConfigurableRetryFactory.CreateIncrementalRetryProvider verwendet:

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

Hinweis

In den nächsten beiden Beispielen finden Sie den benutzerdefinierten Quellcode für Wiederholungslogik aus Core-APIs für konfigurierbare Wiederholungslogik in SqlClient. Es wird davon ausgegangen, dass die Methode CreateCustomProvider in der Klasse CustomCRL_Doc.CustomRetry der Assembly CustomCRL_Doc.dll definiert wird, die sich im ausführenden Verzeichnis der Anwendung befindet.

  • In diesem Beispiel wird versucht, mithilfe des angegebenen benutzerdefinierten Wiederholungsanbieters eine Verbindung bis zu fünf Mal herzustellen, mit einer Verzögerung zwischen 3 und 45 Sekunden sowie den Fehlernummern „4060“, „997“ und „233“ in der Liste:

    <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"/>
    
  • Dieses Beispiel verhält sich wie das vorherige:

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

Von Bedeutung

Die erste Anfrage für eine der konfigurierten Standardeinstellungen bewirkt, dass SqlClient sowohl den Verbindungs- als auch den Befehlsprovider lädt und zwischenspeichert. Änderungen an der Konfigurationsdatei betreffen keinen der beiden Anbieter, bis der Prozess neu gestartet wird.

Fehler beim Lesen der Wiederholungseinstellungen führen nicht zum Fehlschlagen der Anwendung. SQLClient verfolgt den Konfigurationsfehler und verwendet SqlConfigurableRetryFactory.CreateNoneRetryProvider, sodass die Operationen ohne Wiederholungen ausgeführt werden.

Verwenden Sie die Ereignisquellenverfolgung, um die Wiederholungskonfiguration zu überprüfen oder Fehler darin zu beheben. Weitere Informationen finden Sie unter Aktivieren der Ereignisablaufverfolgung in SqlClient.