Configura la logica di ritenti di SqlClient con un file di configurazione

Si applica a: .NET Framework .NET .NET Standard

Scarica ADO.NET

Usa un file di configurazione dell'applicazione per assegnare i provider di nuovi tentativi predefiniti a ogni istanza SqlConnection o SqlCommand nel processo. Senza queste sezioni o un'assegnazione a livello di oggetto del provider, SqlClient utilizza SqlConfigurableRetryFactory.CreateNoneRetryProvider e non riprova.

Sezioni di configurazione

Dichiara le sezioni di riprova all'interno dell'elemento configSections . Le dichiarazioni di sezione devono apparire prima dei corrispondenti valori di configurazione.

  • SqlConfigurableRetryLogicConnection: Imposta il provider predefinito per SqlConnection.
<section name="SqlConfigurableRetryLogicConnection"
        type="Microsoft.Data.SqlClient.SqlConfigurableRetryConnectionSection, Microsoft.Data.SqlClient"/>
  • SqlConfigurableRetryLogicCommand: Imposta il provider predefinito per SqlCommand.
<section name="SqlConfigurableRetryLogicCommand"
        type="Microsoft.Data.SqlClient.SqlConfigurableRetryCommandSection, Microsoft.Data.SqlClient"/>

Sezione Connessione

Imposta la logica predefinita di ritenti per tutte SqlConnection le istanze dell'applicazione usando i seguenti attributi:

  • numberOfTries: Imposta il numero totale di tentativi, inclusa l'operazione iniziale. L'intervallo valido è da 1 a 60.

  • deltaTime: Imposta l'intervallo di gap temporale come un oggetto TimeSpan.

  • minTime: Imposta l'intervallo di tempo minimo consentito come oggetto TimeSpan.

  • maxTime: Imposta l'intervallo di tempo massimo consentito del gap come oggetto TimeSpan.

  • transientErrors: Imposta una lista separata da virgole di numeri di errore da riprovare. Se lo ometti, il provider utilizza la lista di errori transitori integrata. Se lo specifichi, la tua lista sostituisce quella integrata.

  • retryMethod: Specifica un creatore di metodo retry che riceve la configurazione di retry tramite un SqlRetryLogicOption parametro e restituisce un SqlRetryLogicBaseProvider oggetto.

  • retryLogicType: Imposta un provider di logica di ritenti personalizzato che contiene i creatori di metodi di riprova identificati da retryMethod. Questi metodi devono soddisfare i criteri per retryMethod. Usa il nome di tipo completamente qualificato del fornitore. Per altre informazioni, vedere Specificare nomi di tipo completi.

Nota

Non è necessario specificare retryLogicType quando usi un provider integrato. Per i metodi disponibili, vedi Provider logici di ritentazione integrati in SqlClient.

Sezione Command

Imposta la logica di ritentazione predefinita per tutte SqlCommand le istanze nell'applicazione usando gli attributi connection-section e il seguente attributo specifico per comando:

  • authorizedSqlCondition: Imposta un'espressione regolare che SqlCommand.CommandText deve corrispondere prima che il provider riprovi il comando. Se l'espressione non corrisponde, il comando viene eseguito una sola volta senza meccanismo di nuovo tentativo.

Nota

L'espressione regolare è sensibile alla maiuscola minuscola. Includi un'opzione inline come (?i) quando hai bisogno di una corrispondenza senza distinzione tra maiuscole e minuscole.

Esempi

  • Tenta di stabilire una connessione per un massimo di tre volte con un ritardo approssimativo di 1 secondo tra i tentativi usando il metodo SqlConfigurableRetryFactory.CreateFixedRetryProvider e l'elenco di errori temporanei predefinito:

    <SqlConfigurableRetryLogicConnection retryMethod ="CreateFixedRetryProvider"
                                            numberOfTries ="3" deltaTime ="00:00:01"/>
    
  • Tenta di stabilire una connessione per un massimo di cinque volte con un ritardo approssimativo di 45 secondi tra i tentativi usando il metodo SqlConfigurableRetryFactory.CreateExponentialRetryProvider e l'elenco di errori temporanei predefinito:

    <SqlConfigurableRetryLogicConnection retryMethod ="CreateExponentialRetryProvider"
                        numberOfTries ="5" deltaTime ="00:00:03" maxTime ="00:00:45"/>
    
  • Tenta di eseguire un comando per un massimo di quattro volte con un ritardo compreso tra 2 e 30 secondi usando il metodo SqlConfigurableRetryFactory.CreateIncrementalRetryProvider e l'elenco di errori temporanei predefinito:

    <SqlConfigurableRetryLogicCommand retryMethod ="CreateIncrementalRetryProvider"
                        numberOfTries ="4" deltaTime ="00:00:02" maxTime ="00:00:30"/>
    
  • Tenta di eseguire un comando per un massimo di otto volte con un ritardo compreso tra un secondo e un minuto. È limitato ai comandi contenenti CommandText la parola in maiuscolo SELECT e i numeri di errore 102 o 997. Specificare transientErrors sostituisce la lista integrata, così non vengono riprovati altri errori. Nell'esempio seguente viene usato SqlConfigurableRetryFactory.CreateIncrementalRetryProvider:

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

Nota

Nei due esempi seguenti, puoi trovare il codice sorgente della logica di ripetizione personalizzata tratto da API principali della logica di ripetizione configurabile in SqlClient. Si presuppone che il metodo CreateCustomProvider sia definito nella classe CustomCRL_Doc.CustomRetry nell'assembly CustomCRL_Doc.dll che si trova nella directory in esecuzione dell'applicazione.

  • Tenta di stabilire una connessione fino a cinque volte, con un ritardo compreso tra 3 e 45 secondi, con i numeri di errore 4060, 997 e 233 nell'elenco e utilizzando il provider personalizzato per i nuovi tentativi specificato:

    <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"/>
    
  • Questo esempio si comporta come quello precedente:

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

Importante

La prima richiesta per uno dei due predefiniti configurati fa sì che SqlClient carichi e memorizzi in cache sia i provider di connessione che quelli di comandi. Le modifiche al file di configurazione non influenzano nessuno dei due provider finché il processo non si riavvia.

Gli errori durante la lettura delle impostazioni dei tentativi non causano l'arresto dell'applicazione. SqlClient rileva l'errore di configurazione e utilizza SqlConfigurableRetryFactory.CreateNoneRetryProvider, quindi le operazioni vengono eseguite senza tentativi di ripetizione.

Usa il tracciamento dell'origine eventi per verificare o risolvere i problemi relativi alla configurazione dei tentativi di nuovo invio. Per altre informazioni, vedere Abilitare la traccia di eventi in SqlClient.