Konfigurationsdatei für konfigurierbare Wiederholungslogik bei SqlClient
Gilt für: .NET Framework .NET .NET Standard
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.
- .NET Framework: Weitere Informationen finden Sie unter Element „AppContextSwitchOverrides“.
<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ürretryMethod
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
CommandText
beschränkt, die das WortSELECT
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.