Configureer SqlClient hertry-logica met een configuratiebestand

Van toepassing op: .NET Framework .NET Standard

ADO.NET downloaden

Gebruik een toepassingsconfiguratiebestand om standaard retry-providers toe te wijzen aan elke SqlCommand- of SqlConnection-instantie in het proces. Zonder deze secties of een providertoewijzing op objectniveau gebruikt SqlClient SqlConfigurableRetryFactory.CreateNoneRetryProvider en probeert het niet opnieuw.

Configuratiesecties

Definieer de retrysecties binnen het element configSections. Sectiedeclaraties moeten vóór de bijbehorende configuratiewaarden verschijnen.

  • SqlConfigurableRetryLogicConnection: Stelt de standaardprovider in voor SqlConnection.
<section name="SqlConfigurableRetryLogicConnection"
        type="Microsoft.Data.SqlClient.SqlConfigurableRetryConnectionSection, Microsoft.Data.SqlClient"/>
  • SqlConfigurableRetryLogicCommand: Stelt de standaardprovider in voor SqlCommand.
<section name="SqlConfigurableRetryLogicCommand"
        type="Microsoft.Data.SqlClient.SqlConfigurableRetryCommandSection, Microsoft.Data.SqlClient"/>

Sectie Verbinding

Stel de standaard herkansingslogica in voor alle SqlConnection instanties in de applicatie in door de volgende attributen te gebruiken:

  • numberOfTries: Stelt het totale aantal pogingen vast, inclusief de initiële bewerking. Het geldige bereik is 1 tot en met 60.

  • deltaTime: Stelt het gap time interval in als object TimeSpan .

  • minTime: Stelt het toegestane minimale gap-tijdsinterval in als object TimeSpan .

  • maxTime: Stelt het toegestane maximale gap-tijdinterval in als object TimeSpan .

  • transientErrors: Stelt een komma-gescheiden lijst van foutnummers in die opnieuw wordt geprobeerd. Als je het weglaat, gebruikt de zorgverlener de ingebouwde lijst met tijdelijke fouten. Als je het specificeert, vervangt je lijst de ingebouwde lijst.

  • retryMethod: Specificeert een maker van de retry-methode die de retry-configuratie ontvangt via een SqlRetryLogicOption parameter en een SqlRetryLogicBaseProvider object teruggeeft.

  • retryLogicType: Stelt een aangepaste provider voor retrylogica in die de methoden bevat waarmee nieuwe pogingen worden gemaakt en die worden geïdentificeerd door retryMethod. Die methoden moeten voldoen aan de criteria voor retryMethod. Gebruik de volledig gekwalificeerde typenaam van de aanbieder. Zie Volledig gekwalificeerde typenamen opgeven voor meer informatie.

Opmerking

Je hoeft niet te specificeren retryLogicType wanneer je een ingebouwde provider gebruikt. Zie voor de beschikbare methoden ingebouwde providers voor logica voor opnieuw proberen in SqlClient.

Opdrachtgedeelte

Stel de standaard retry-logica in voor alle SqlCommand instanties in de applicatie in door gebruik te maken van de connection-section attributen en het volgende commando-specifieke attribuut:

  • authorizedSqlCondition: Stelt een reguliere expressie in die SqlCommand.CommandText moet overeenkomen voordat de provider het commando opnieuw probeert. Als de expressie niet overeenkomt, wordt het commando één keer uitgevoerd zonder herkansingslogica.

Opmerking

De reguliere uitdrukking is hoofdlettergevoelig. Voeg een inline optie toe, bijvoorbeeld (?i) wanneer je een hoofdletter-ongevoelige matching nodig hebt.

Voorbeelden

  • Pogingen om een verbinding tot drie keer tot stand te brengen met een vertraging van ongeveer 1 seconde tussen pogingen met behulp van de SqlConfigurableRetryFactory.CreateFixedRetryProvider methode en de standaard tijdelijke foutenlijst:

    <SqlConfigurableRetryLogicConnection retryMethod ="CreateFixedRetryProvider"
                                            numberOfTries ="3" deltaTime ="00:00:01"/>
    
  • Pogingen om een verbinding tot vijf keer tot stand te brengen met een vertraging van maximaal 45 seconden tussen pogingen met behulp van de SqlConfigurableRetryFactory.CreateExponentialRetryProvider methode en de standaard tijdelijke foutenlijst:

    <SqlConfigurableRetryLogicConnection retryMethod ="CreateExponentialRetryProvider"
                        numberOfTries ="5" deltaTime ="00:00:03" maxTime ="00:00:45"/>
    
  • Probeert een opdracht maximaal vier keer uit te voeren met een vertraging tussen 2 en 30 seconden met behulp van de SqlConfigurableRetryFactory.CreateIncrementalRetryProvider methode en de standaard tijdelijke foutenlijst:

    <SqlConfigurableRetryLogicCommand retryMethod ="CreateIncrementalRetryProvider"
                        numberOfTries ="4" deltaTime ="00:00:02" maxTime ="00:00:30"/>
    
  • Probeert een opdracht maximaal acht keer uit te voeren met een vertraging van één seconde tot één minuut. Het is beperkt tot opdrachten met CommandText die het woord SELECT in hoofdletters bevatten en foutnummers 102 of 997. Als u transientErrors opgeeft, wordt de ingebouwde lijst vervangen, waardoor geen andere fouten opnieuw worden geprobeerd. In het volgende voorbeeld wordt SqlConfigurableRetryFactory.CreateIncrementalRetryProvidergebruikt:

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

Opmerking

In de volgende twee voorbeelden vindt u de aangepaste broncode voor opnieuw proberen van configureerbare logische kern-API's voor opnieuw proberen in SqlClient. Hierbij wordt ervan uitgegaan dat de CreateCustomProvider methode is gedefinieerd in de CustomCRL_Doc.CustomRetry klasse in de CustomCRL_Doc.dll assembly die zich in de uitvoermap van de toepassing bevindt.

  • Probeert maximaal vijf keer een verbinding tot stand te brengen, met een vertraging tussen 3 en 45 seconden, met foutnummers 4060, 997 en 233 in de lijst, en met gebruik van de opgegeven aangepaste retry-provider:

    <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"/>
    
  • Dit voorbeeld gedraagt zich als de vorige:

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

Belangrijk

Het eerste verzoek voor een van beide geconfigureerde standaardinstellingen zorgt ervoor dat SqlClient zowel de verbindings- als de commandoproviders laadt en cachet. Wijzigingen in het configuratiebestand hebben geen invloed op een van beide providers totdat het proces opnieuw wordt gestart.

Fouten bij het lezen van de instellingen voor nieuwe pogingen zorgen er niet voor dat de applicatie faalt. SqlClient traceert de configuratiefout en gebruikt SqlConfigurableRetryFactory.CreateNoneRetryProvider, zodat de operaties zonder herpogingen verlopen.

Gebruik gebeurtenisbrontracering om de configuratie voor nieuwe pogingen te verifiëren of problemen ermee op te lossen. Zie Gebeurtenistracering inschakelen in SqlClient voor meer informatie.