File di configurazione della logica di ripetizione dei tentativi configurabile con SqlClient
Si applica a: .NET Framework .NET .NET Standard
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.
- .NET Framework: per altre informazioni, vedere Elemento AppContextSwitchOverrides.
<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 perretryMethod
. È 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 parolaSELECT
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
- Abilitare la logica di ripetizione dei tentativi configurabile
- Provider di logica di ripetizione dei tentativi interni in SqlClient
- Abilitare la traccia eventi in SqlClient
- Specifica di nomi di tipo completi
- Logica di ripetizione dei tentativi configurabile in SqlClient
- Microsoft ADO.NET per SQL Server