Fichier de configuration de la logique de nouvelle tentative configurable avec SqlClient

S'applique à : .NET Framework .NET .NET Standard

Télécharger ADO.NET

La méthode de nouvelle tentative par défaut quand le commutateur de sécurité est activé est SqlConfigurableRetryFactory.CreateNoneRetryProvider à la fois pour SqlConnection et pour SqlCommand. Vous pouvez spécifier une autre méthode de nouvelle tentative en utilisant un fichier de configuration.

Sections de configuration

Les options de logique de nouvelle tentative par défaut d’une application peuvent être modifiées en ajoutant les sections suivantes dans la section configSections du fichier de configuration :

  • SqlConfigurableRetryLogicConnection : pour spécifier la logique de nouvelle tentative par défaut pour SqlConnection.
<section name="SqlConfigurableRetryLogicConnection"
        type="Microsoft.Data.SqlClient.SqlConfigurableRetryConnectionSection, Microsoft.Data.SqlClient"/>
  • SqlConfigurableRetryLogicCommand : pour spécifier la logique de nouvelle tentative par défaut pour SqlCommand.
<section name="SqlConfigurableRetryLogicCommand"
        type="Microsoft.Data.SqlClient.SqlConfigurableRetryCommandSection, Microsoft.Data.SqlClient"/>
  • AppContextSwitchOverrides : le .NET Framework prend en charge les commutateurs AppContext par le biais d’une section AppContextSwitchOverrides, qui n’a pas besoin d’être définie explicitement. Pour activer un commutateur dans .NET Core, vous devez spécifier cette section.
<section name="AppContextSwitchOverrides"
        type="Microsoft.Data.SqlClient.AppContextSwitchOverridesSection, Microsoft.Data.SqlClient"/>

Notes

Les configurations suivantes doivent être spécifiées dans la section configuration. Déclarez ces nouvelles sections pour configurer la logique de nouvelle tentative par défaut par le biais d’un fichier de configuration d’application.

Activer le commutateur de sécurité

Notes

À partir de Microsoft.Data.SqlClient v4.0, le commutateur AppContext « Switch.Microsoft.Data.SqlClient.EnableRetryLogic » n’est plus nécessaire pour utiliser la fonctionnalité de logique de nouvelle tentative configurable. La fonctionnalité est désormais prise en charge en production. Le comportement par défaut de la fonctionnalité continue d’être une stratégie sans nouvelle tentative. Celle-ci doit être remplacée par les applications clientes pour autoriser les nouvelles tentatives.

Vous pouvez activer le commutateur de sécurité par le biais d’un fichier de configuration. Pour savoir comment l’activer par le biais d’un code d’application, consultez Activer la logique de nouvelle tentative configurable.

<runtime>
    <AppContextSwitchOverrides value="Switch.Microsoft.Data.SqlClient.EnableRetryLogic=true"/>
</runtime>
  • .Net Core : prend en charge plusieurs commutateurs délimités par des points-virgules (;) comme le .NET Framework.
<AppContextSwitchOverrides value="Switch.Microsoft.Data.SqlClient.EnableRetryLogic=true"/>

Section Connexion

Les attributs suivants peuvent être utilisés pour spécifier la logique de nouvelle tentative par défaut pour toutes les instances de SqlConnection dans une application :

  • numberOfTries : définit le nombre de tentatives.

  • deltaTime : définit l’écart de temps sous la forme d’un objet TimeSpan.

  • minTime : définit l’écart de temps minimal autorisé sous la forme d’un objet TimeSpan.

  • maxTime : définit l’écart de temps maximal autorisé sous la forme d’un objet TimeSpan.

  • transientErrors : définit la liste des numéros d’erreur temporaire sur lesquels effectuer une nouvelle tentative.

  • retryMethod : spécifie un créateur de méthode de nouvelle tentative qui reçoit la configuration de nouvelle tentative par le biais d’un paramètre SqlRetryLogicOption et retourne un objet SqlRetryLogicBaseProvider.

  • retryLogicType : définit un fournisseur de logique de nouvelle tentative personnalisé qui contient les créateurs de méthode de nouvelle tentative qui fournissent retryMethod. Ces méthodes doivent répondre aux critères de retryMethod. Le nom de type complet du fournisseur doit être utilisé. Pour plus d’informations, consultez Spécification de noms de types complets.

Notes

Il n’est pas nécessaire de spécifier retryLogicType si vous utilisez les fournisseurs de nouvelles tentatives intégrés. Pour connaître les fournisseurs de nouvelles tentatives intégrés, consultez Fournisseurs de logique de nouvelle tentative internes dans SqlClient.

Section Commande

L’attribut suivant peut également être défini pour toutes les instances de SqlCommand dans une application :

  • authorizedSqlCondition : définit une expression régulière applicable avant toute nouvelle tentative pour SqlCommand.CommandText afin de filtrer des instructions SQL spécifiques.

Notes

L’expression régulière respecte la casse.

Exemples

  • Tente d’établir une connexion au maximum trois fois avec un délai approximatif de 1 seconde entre les tentatives à l’aide de la méthode SqlConfigurableRetryFactory.CreateFixedRetryProvider et de la liste des erreurs temporaires par défaut :

    <SqlConfigurableRetryLogicConnection retryMethod ="CreateFixedRetryProvider" 
                                            numberOfTries ="3" deltaTime ="00:00:01"/>
    
  • Tente d’établir une connexion au maximum cinq fois avec un délai de 45 secondes entre les tentatives à l’aide de la méthode SqlConfigurableRetryFactory.CreateExponentialRetryProvider et de la liste des erreurs temporaires par défaut :

    <SqlConfigurableRetryLogicConnection retryMethod ="CreateExponentialRetryProvider" 
                        numberOfTries ="5" deltaTime ="00:00:03" maxTime ="00:00:45"/>
    
  • Tente d’exécuter une commande au maximum quatre fois dans un délai de 2 à 30 secondes à l’aide de la méthode SqlConfigurableRetryFactory.CreateIncrementalRetryProvider et de la liste des erreurs temporaires par défaut :

    <SqlConfigurableRetryLogicCommand retryMethod ="CreateIncrementalRetryProvider"
                        numberOfTries ="4" deltaTime ="00:00:02" maxTime ="00:00:30"/>
    
  • Tente d’exécuter une commande au maximum huit fois avec un délai d’une seconde à une minute. Elle est limitée aux commandes CommandText contenant le mot SELECT et les numéros d’exception 102 ou 997. Elle utilise la méthode SqlConfigurableRetryFactory.CreateIncrementalRetryProvider intégrée :

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

Notes

Dans les deux prochains exemples, vous trouverez le code source de la logique de nouvelle tentative personnalisée fourni dans API principales de logique de nouvelle tentative configurable dans SqlClient. Nous partons du principe que la méthode CreateCustomProvider est définie dans la classe CustomCRL_Doc.CustomRetry de l’assembly CustomCRL_Doc.dll qui se trouve dans le répertoire d’exécution de l’application.

  • Tente d’établir une connexion au maximum cinq fois, avec un délai de 3 à 45 secondes, avec les numéros d’erreur 4060, 997 et 233 figurant dans la liste, et en utilisant le fournisseur de nouvelles tentatives personnalisé spécifié :

    <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"/>
    
  • Cet exemple se comporte comme le précédent :

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

Notes

Les fournisseurs de logique de nouvelle tentative sont mis en cache lors de la première utilisation sur une connexion ou une commande en vue d’une utilisation ultérieure pendant la durée de vie d’une application.

Notes

Toutes les erreurs survenant lors de la lecture d’un fichier de configuration d’application afin d’obtenir les paramètres de logique de nouvelle tentative ne provoquent pas d’erreurs dans l’application. La valeur SqlConfigurableRetryFactory.CreateNoneRetryProvider par défaut sera utilisée à la place.

Vous pouvez utiliser le suivi de la source d’événement pour vérifier ou résoudre les problèmes liés à la configuration de la logique de nouvelle tentative. Pour plus d’informations, consultez Activer le suivi d’événements dans SqlClient.

Voir aussi