Konfigurera SqlClient återförsökslogik med en konfigurationsfil

Gäller för: .NET Framework .NET .NET Standard

Ladda ned ADO.NET

Använd en applikationskonfigurationsfil för att tilldela standardretry-leverantörer till varje SqlConnection eller SqlCommand instans i processen. Utan dessa avsnitt eller en providertilldelning på objektnivå använder SqlClient SqlConfigurableRetryFactory.CreateNoneRetryProvider och gör inget nytt försök.

Konfigurationsavsnitt

Deklarera återförsökssektionerna inom elementet configSections . Sektionsdeklarationer måste visas före motsvarande konfigurationsvärden.

  • SqlConfigurableRetryLogicConnection: Sätter standardleverantören för SqlConnection.
<section name="SqlConfigurableRetryLogicConnection"
        type="Microsoft.Data.SqlClient.SqlConfigurableRetryConnectionSection, Microsoft.Data.SqlClient"/>
  • SqlConfigurableRetryLogicCommand: Sätter standardleverantören för SqlCommand.
<section name="SqlConfigurableRetryLogicCommand"
        type="Microsoft.Data.SqlClient.SqlConfigurableRetryCommandSection, Microsoft.Data.SqlClient"/>

Anslutningsavsnitt

Sätt standardlogiken för återförsök för alla SqlConnection instanser i applikationen genom att använda följande attribut:

  • numberOfTries: Sätter det totala antalet försök, inklusive den initiala operationen. Det giltiga intervallet är 1 till 60.

  • deltaTime: Sätter gap-tidsintervallet som ett TimeSpan objekt.

  • minTime: Sätter det tillåtna minsta gap-tidsintervallet som ett TimeSpan objekt.

  • maxTime: Sätter det tillåtna maximala gap-tidsintervallet som ett TimeSpan objekt.

  • transientErrors: Sätter en komma-separerad lista med felnummer att försöka om. Om du utelämnar det använder leverantören den inbyggda listan över tillfälliga fel. Om du anger det ersätter din lista den inbyggda listan.

  • retryMethod: Specificerar en retry-metodskapare som tar emot retry-konfigurationen via en SqlRetryLogicOption parameter och returnerar ett SqlRetryLogicBaseProvider objekt.

  • retryLogicType: Sätter en anpassad retry-logikleverantör som innehåller retry-metodens skapare identifierade med retryMethod. Dessa metoder måste uppfylla kriterierna för retryMethod. Använd leverantörens fullt kvalificerade typnamn. Mer information finns i Ange fullständigt kvalificerade typnamn.

Anmärkning

Du behöver inte specificera retryLogicType när du använder en inbyggd leverantör. För tillgängliga metoder, se Inbyggda retry-logikleverantörer i SqlClient.

Kommandoavsnitt

Ställ in standardlogiken för återförsök för alla SqlCommand instanser i applikationen genom att använda connection-section-attributen och följande kommandospecifika attribut:

  • authorizedSqlCondition: Sätter ett reguljärt uttryck som SqlCommand.CommandText måste matcha innan leverantören försöker om kommandot. Om uttrycket inte stämmer körs kommandot en gång utan omförsökslogik.

Anmärkning

Det reguljära uttrycket är kasuskänsligt. Inkludera ett infogat alternativ, till exempel (?i), när du behöver skiftlägesokänslig matchning.

Examples

  • Försöker upprätta en anslutning upp till tre gånger med en ungefärlig fördröjning på 1 sekund mellan försöken med hjälp av metoden SqlConfigurableRetryFactory.CreateFixedRetryProvider och standardlistan över tillfälliga fel:

    <SqlConfigurableRetryLogicConnection retryMethod ="CreateFixedRetryProvider"
                                            numberOfTries ="3" deltaTime ="00:00:01"/>
    
  • Gör upp till fem försök att upprätta en anslutning, med upp till 45 sekunders fördröjning mellan försöken, med metoden SqlConfigurableRetryFactory.CreateExponentialRetryProvider och standardlistan över tillfälliga fel:

    <SqlConfigurableRetryLogicConnection retryMethod ="CreateExponentialRetryProvider"
                        numberOfTries ="5" deltaTime ="00:00:03" maxTime ="00:00:45"/>
    
  • Försöker köra ett kommando upp till fyra gånger med en fördröjning mellan 2 och 30 sekunder med hjälp SqlConfigurableRetryFactory.CreateIncrementalRetryProvider av metoden och standardlistan för tillfälliga fel:

    <SqlConfigurableRetryLogicCommand retryMethod ="CreateIncrementalRetryProvider"
                        numberOfTries ="4" deltaTime ="00:00:02" maxTime ="00:00:30"/>
    
  • Försöker köra ett kommando upp till åtta gånger med en fördröjning från en sekund till en minut. Det är begränsat till kommandon med CommandText som innehåller ordet SELECT med versaler och felnummer 102 eller 997. Att specificera transientErrors ersätter den inbyggda listan, så inga andra fel kan göras om. I följande exempel används SqlConfigurableRetryFactory.CreateIncrementalRetryProvider:

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

Anmärkning

I följande två exempel finns källkoden för anpassad logik för återförsök från Kärn-API:er för konfigurerbar logik för återförsök i SqlClient. Det antas att CreateCustomProvider metoden definieras i CustomCRL_Doc.CustomRetry klassen i CustomCRL_Doc.dll sammansättningen som finns i programmets körkatalog.

  • Försöker upprätta en anslutning upp till fem gånger, med en fördröjning mellan 3 och 45 sekunder, felnummer 4060, 997 och 233 i listan och med hjälp av den angivna anpassade återförsöksprovidern:

    <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"/>
    
  • Det här exemplet fungerar som det föregående:

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

Viktigt!

Den första förfrågan för någon av de konfigurerade standardinställningarna gör att SqlClient laddar och cachar både anslutnings- och kommandoleverantörerna. Ändringar i konfigurationsfilen påverkar inte någon av leverantörerna förrän processen startas om.

Fel vid läsning av omprövade inställningar gör att applikationen inte misslyckas. SqlClient spårar konfigurationsfelet och använder SqlConfigurableRetryFactory.CreateNoneRetryProvider, så att operationer körs utan omförsök.

Använd händelsekällspårning för att verifiera eller felsöka återförsökskonfigurationen. Mer information finns i Aktivera händelsespårning i SqlClient.