File di configurazione della logica di ripetizione dei tentativi configurabile con SqlClient

Si applica a: .NET Framework .NET Standard

Scarica ADO.NET

Il metodo predefinito per i tentativi quando è abilitata l'opzione per la sicurezza è SqlConfigurableRetryFactory.CreateNoneRetryProvider per SqlConnection e SqlCommand. È possibile specificare un metodo diverso per i tentativi usando un file di configurazione.

Sezioni di configurazione

È possibile modificare le opzioni predefinite per la logica di ripetizione dei tentativi per un'applicazione aggiungendo le sezioni seguenti all'interno della sezione configSections del file di configurazione:

  • SqlConfigurableRetryLogicConnection: per specificare la logica di ripetizione dei tentativi predefinita per SqlConnection.
<section name="SqlConfigurableRetryLogicConnection"
        type="Microsoft.Data.SqlClient.SqlConfigurableRetryConnectionSection, Microsoft.Data.SqlClient"/>
  • SqlConfigurableRetryLogicCommand: per specificare la logica di ripetizione dei tentativi predefinita per SqlCommand.
<section name="SqlConfigurableRetryLogicCommand"
        type="Microsoft.Data.SqlClient.SqlConfigurableRetryCommandSection, Microsoft.Data.SqlClient"/>
  • AppContextSwitchOverrides: .NET Framework supporta opzioni di AppContext tramite una sezione AppContextSwitchOverrides, che non deve essere definita in modo esplicito. Per attivare un'opzione in .NET Core, è necessario specificare questa sezione.
<section name="AppContextSwitchOverrides"
        type="Microsoft.Data.SqlClient.AppContextSwitchOverridesSection, Microsoft.Data.SqlClient"/>

Nota

Le configurazioni seguenti devono essere specificate all'interno della sezione configuration. Dichiarare queste nuove sezioni in modo da configurare la logica di ripetizione dei tentativi predefinita tramite un file di configurazione dell'applicazione.

Abilitare l'opzione per la sicurezza

Nota

A partire da Microsoft.Data.SqlClient v4.0, l'opzione di AppContext "Switch.Microsoft.Data.SqlClient.EnableRetryLogic" non sarà più necessaria per usare la funzionalità della logica di ripetizione dei tentativi configurabile. La funzionalità è ora supportata nell'ambiente di produzione. Il comportamento predefinito della funzionalità continuerà a consistere in un criterio di non ripetizione dei tentativi, che dovrà essere sostituito dalle applicazioni client per abilitare la ripetizione dei tentativi.

È possibile abilitare l'opzione per la sicurezza tramite un file di configurazione. Per informazioni su come abilitarla tramite il codice dell'applicazione, vedere Abilitare la logica di ripetizione dei tentativi configurabile.

<runtime>
    <AppContextSwitchOverrides value="Switch.Microsoft.Data.SqlClient.EnableRetryLogic=true"/>
</runtime>
  • .NET Core: supporta più opzioni delimitate da punto e virgola (;) come .NET Framework.
<AppContextSwitchOverrides value="Switch.Microsoft.Data.SqlClient.EnableRetryLogic=true"/>

Sezione Connection

È possibile usare gli attributi seguenti per specificare la logica di ripetizione dei tentativi predefinita per tutte le istanze SqlConnection in un'applicazione:

  • numberOfTries: imposta il numero di volte in cui ripetere i tentativi.

  • deltaTime: imposta l'intervallo di tempo come oggetto TimeSpan.

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

  • maxTime: imposta l'intervallo di tempo massimo consentito come oggetto TimeSpan.

  • transientErrors: imposta l'elenco di numeri di errore temporanei su cui ripetere i tentativi.

  • retryMethod: specifica un creatore di metodi per i tentativi che riceve la configurazione dei tentativi tramite un parametro SqlRetryLogicOption e restituisce un oggetto SqlRetryLogicBaseProvider.

  • retryLogicType: imposta un provider di logica di ripetizione dei tentativi contenente i creatori di metodi per i tentativi che forniscono retryMethod. Questi metodi devono soddisfare i criteri per retryMethod. È necessario usare il nome di tipo completo del provider. Per altre informazioni, vedere Specifica di nomi di tipo completi.

Nota

Non è necessario specificare retryLogicType se si usano i provider di logica di ripetizione dei tentativi predefiniti. Per trovare i provider di logica di ripetizione dei tentativi predefiniti, vedere Provider di logica di ripetizione dei tentativi interni in SqlClient.

Sezione Command

È possibile impostare anche l'attributo seguente per tutte le istanze SqlCommand in un'applicazione:

  • authorizedSqlCondition: imposta un'espressione regolare prima della ripetizione dei tentativi per SqlCommand.CommandText per filtrare istruzioni SQL specifiche.

Nota

L'espressione regolare fa 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 con CommandText contenenti la parola SELECT e il numero di eccezione 102 o 997. Usa il metodo SqlConfigurableRetryFactory.CreateIncrementalRetryProvider predefinito:

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

Nota

Per i due esempi seguenti è possibile trovare il codice sorgente della logica di ripetizione dei tentativi in API principali della logica di ripetizione dei tentativi 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 per un massimo di cinque volte con un ritardo compreso tra 3 e 45 secondi, i numeri di errore 4060, 997 e 233 nell'elenco e usando il provider di ripetizione dei tentativi personalizzato 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"/>
    

Nota

I provider di logica di ripetizione dei tentativi verranno memorizzati nella cache al primo uso in una connessione o in un comando per l'utilizzo successivo durante il ciclo di vita di un'applicazione.

Nota

Eventuali errori durante la lettura di un file di configurazione dell'applicazione per individuare le impostazioni della logica di ripetizione dei tentativi non causano errori nell'applicazione. Verrà usato invece il provider SqlConfigurableRetryFactory.CreateNoneRetryProvider predefinito.

È possibile usare la traccia dell'origine degli eventi per verificare o risolvere i problemi relativi alla configurazione della logica di ripetizione dei tentativi. Per altre informazioni, vedere Abilitare la traccia di eventi in SqlClient.

Vedi anche