Share via


Konfigurationsdatei für konfigurierbare Wiederholungslogik bei SqlClient

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

Herunterladen von ADO.NET

Die standardmäßige Wiederholungsmethode bei aktiviertem Sicherheitsschalter ist SqlConfigurableRetryFactory.CreateNoneRetryProvider sowohl für SqlConnection als auch für SqlCommand. Sie können mithilfe einer Konfigurationsdatei eine andere Wiederholungsmethode angeben.

Konfigurationsabschnitte

Die Optionen für standardmäßige Wiederholungslogik bei einer Anwendung können durch Hinzufügen der folgenden Abschnitte im Abschnitt configSections der Konfigurationsdatei geändert werden:

  • SqlConfigurableRetryLogicConnection: Wird zur Angabe der standardmäßigen Wiederholungslogik für SqlConnection verwendet.
<section name="SqlConfigurableRetryLogicConnection"
        type="Microsoft.Data.SqlClient.SqlConfigurableRetryConnectionSection, Microsoft.Data.SqlClient"/>
  • SqlConfigurableRetryLogicCommand: Wird zur Angabe der standardmäßigen Wiederholungslogik für SqlCommand verwendet.
<section name="SqlConfigurableRetryLogicCommand"
        type="Microsoft.Data.SqlClient.SqlConfigurableRetryCommandSection, Microsoft.Data.SqlClient"/>
  • AppContextSwitchOverrides: .NET Framework unterstützt AppContext-Optionen über einen AppContextSwitchOverrides-Abschnitt, der nicht explizit definiert werden muss. Wenn Sie eine Option in .NET Core aktivieren möchten, müssen Sie diesen Abschnitt angeben.
<section name="AppContextSwitchOverrides"
        type="Microsoft.Data.SqlClient.AppContextSwitchOverridesSection, Microsoft.Data.SqlClient"/>

Hinweis

Die folgenden Konfigurationen sollten im Abschnitt configuration angegeben werden. Deklarieren Sie diese neuen Abschnitte, um die standardmäßige Wiederholungslogik über eine Anwendungskonfigurationsdatei zu konfigurieren.

Aktivieren des Sicherheitsschalters

Hinweis

Ab Microsoft.Data.SqlClient v4.0 ist die App-Kontextoption „Switch.Microsoft.Data.SqlClient.EnableRetryLogic“ nicht mehr erforderlich, um das Feature der konfigurierbaren Wiederholungslogik zu verwenden. Das Feature wird jetzt in der Produktion unterstützt. Das Standardverhalten des Features ist weiterhin eine Nicht-Wiederholungsrichtlinie, die von Clientanwendungen überschrieben werden muss, um Wiederholungen zu ermöglichen.

Sie können den Sicherheitsschalter über eine Konfigurationsdatei aktivieren. Informationen dazu, wie Sie ihn über Anwendungscode aktivieren, finden Sie unter Aktivieren der konfigurierbaren Wiederholungslogik.

<runtime>
    <AppContextSwitchOverrides value="Switch.Microsoft.Data.SqlClient.EnableRetryLogic=true"/>
</runtime>
  • .NET Core: Unterstützt mehrere, durch Semikolon (;) getrennte Switches wie „.NET Framework“.
<AppContextSwitchOverrides value="Switch.Microsoft.Data.SqlClient.EnableRetryLogic=true"/>

Verbindungsabschnitt

Die folgenden Attribute können verwendet werden, um die standardmäßige Wiederholungslogik für alle SqlConnection-Instanzen in einer Anwendung anzugeben:

  • numberOfTries: Legt die Anzahl von Versuchen fest.

  • deltaTime: Legt das Intervall für die zeitliche Lücke als TimeSpan-Objekt fest.

  • minTime: Legt das zulässige Intervall für die minimale zeitliche Lücke als TimeSpan-Objekt fest.

  • maxTime: Legt das zulässige Intervall für die maximale zeitliche Lücke als TimeSpan-Objekt fest.

  • transientErrors: Legt die Liste der vorübergehenden Fehlernummern fest, bei denen der Vorgang wiederholt werden soll.

  • retryMethod: Gibt einen Ersteller der Wiederholungsmethode an, der die Wiederholungskonfiguration über einen SqlRetryLogicOption-Parameter empfängt und ein SqlRetryLogicBaseProvider-Objekt zurückgibt.

  • retryLogicType: Legt einen benutzerdefinierten Anbieter von Wiederholungslogik fest, der die Ersteller der Wiederholungsmethode enthält, die den Wert für retryMethod bereitstellen. Diese Methoden sollten die Kriterien für retryMethod erfüllen. Der vollqualifizierte Typname des Anbieters sollte verwendet werden. Weitere Informationen finden Sie unter Angeben vollqualifizierter Typnamen.

Hinweis

Wenn Sie die integrierten Wiederholungsanbieter verwenden, ist es nicht erforderlich, den Wert retryLogicType anzugeben. Informationen zu den integrierten Wiederholungsanbietern finden Sie unter Interne Anbieter von Wiederholungslogik in SqlClient.

Befehlsabschnitt

Das folgende Attribut kann ebenfalls für alle SqlCommand-Instanzen in einer Anwendung festgelegt werden:

  • authorizedSqlCondition: Legt einen regulären Ausdruck vor Wiederholungsversuchen für SqlCommand.CommandText fest, um bestimmte SQL-Anweisungen zu filtern.

Hinweis

Beim regulären Ausdruck muss die Groß-/Kleinschreibung beachtet werden.

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. Dieses Beispiel ist auf Befehle mit CommandTextbeschränkt, die das Wort SELECT und die Ausnahmenummern „102“ oder „997“ enthalten. Es verwendet die integrierte Methode SqlConfigurableRetryFactory.CreateIncrementalRetryProvider:

    <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"/>
    

Hinweis

Anbieter von Wiederholungslogik werden bei der ersten Verwendung für eine Verbindung oder einen Befehl zur künftigen Verwendung während der Lebensdauer einer Anwendung zwischengespeichert.

Hinweis

Fehler beim Lesen einer Anwendungskonfigurationsdatei für Wiederholungslogikeinstellungen verursachen keine Fehler in der Anwendung. Stattdessen wird der Standardwert SqlConfigurableRetryFactory.CreateNoneRetryProvider verwendet.

Mithilfe der Ereignisquellen-Ablaufverfolgung können Sie Probleme beim Konfigurieren der Wiederholungslogik überprüfen oder beheben. Weitere Informationen finden Sie unter Aktivieren der Ereignisablaufverfolgung in SqlClient.

Weitere Informationen