Retrylogica configureren in SqlClient

Van toepassing op: .NET Framework .NET Standard

ADO.NET downloaden

Dit artikel laat zien hoe je een exponentiële herkansingsprovider creëert en deze toewijst aan een SqlConnection. De provider probeert de ingebouwde lijst van tijdelijke verbindingsfouten van de driver opnieuw en probeert de verbinding tot vijf keer te openen.

Prerequisites

  • Microsoft. Data.SqlClient 3.0 of een latere versie.
  • Een verbindingsreeks voor SQL Server, Azure SQL Database, Azure SQL Managed Instance, of SQL database in Microsoft Fabric.

Configureer een verbindingsherhalingsprovider

  1. Stel de opties voor opnieuw proberen in. Laat TransientErrors als null zodat de provider de ingebouwde lijst met tijdelijke fouten gebruikt.

    // Define the retry logic parameters
    var options = new SqlRetryLogicOption()
    {
        // Tries 5 times before throwing an exception
        NumberOfTries = 5,
        // Preferred gap time to delay before retry
        DeltaTime = TimeSpan.FromSeconds(1),
        // Maximum gap time for each delay time before retry
        MaxTimeInterval = TimeSpan.FromSeconds(20)
    };
    
  2. Maak een provider aan op basis van de opties.

    // Create a retry logic provider
    SqlRetryLogicBaseProvider provider = SqlConfigurableRetryFactory.CreateExponentialRetryProvider(options);
    
  3. Wijs de provider toe voordat je de verbinding opent.

    // Assumes that connection is a valid SqlConnection object 
    // Set the retry logic provider on the connection instance
    connection.RetryLogicProvider = provider;
    // Establishing the connection will retry if a transient failure occurs.
    connection.Open();
    

NumberOfTries = 5 staat één eerste poging toe en tot vier herpogingen. De exponentiële provider verhoogt het interval tussen pogingen en voegt willekeurige jitter toe. MaxTimeInterval Beperkt elke individuele vertraging, niet de totale verstreken tijd voor alle pogingen.

Configureer herhaalpogingen voor opdrachten

Maak een aparte aanbieder aan en wijs die toe aan SqlCommand.RetryLogicProvider. Stel SqlRetryLogicOption.AuthorizedSqlCondition in op een predicaat dat alleen true retourneert voor opdrachten die uw toepassing veilig opnieuw kan uitvoeren.

Caution

Een ingebouwde provider probeert een commando niet opnieuw wanneer de verbinding een actieve transactie heeft. Als een tijdelijke storing een transactie ongeldig maakt, rol dan terug en probeer de hele transactie opnieuw. Probeer niet alleen de mislukte verklaring opnieuw.

Het instellen van SqlRetryLogicOption.TransientErrors vervangt de ingebouwde foutenlijst van het stuurprogramma. Om de basislijn uit te breiden zonder de standaardwaarden te verliezen, zie De ingebouwde lijst met tijdelijke fouten uitbreiden.