Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a: .NET Framework
.NET
Standard
Este artículo muestra cómo crear un proveedor de reintentos exponenciales y asignarlo a un SqlConnection. El proveedor vuelve a intentar los errores de conexión transitorios de la lista integrada del controlador e intenta abrir la conexión hasta cinco veces.
Prerequisites
- Microsoft. Data.SqlClient 3.0 o una versión posterior.
- Una cadena de conexión para SQL Server, Azure SQL Database, Azure SQL Managed Instance o una base de datos SQL en Microsoft Fabric.
Configurar un proveedor de reintentos de conexión
Define las opciones de reintento. Deja
TransientErrorscomonullpara que el proveedor use la lista de errores transitorios incorporada.// 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) };Crea un proveedor entre las opciones.
// Create a retry logic provider SqlRetryLogicBaseProvider provider = SqlConfigurableRetryFactory.CreateExponentialRetryProvider(options);Asigna el proveedor antes de abrir la conexión.
// 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 permite un intento inicial y hasta cuatro intentos. El proveedor exponencial aumenta el intervalo entre intentos y añade fluctuaciones aleatorias.
MaxTimeInterval Limita cada retraso individual, no el tiempo total transcurrido de todos los intentos.
Configurar reintentos de comandos
Crea un proveedor separado y asígnalo a SqlCommand.RetryLogicProvider. Establece SqlRetryLogicOption.AuthorizedSqlCondition un predicado que solo devuelva true los comandos que tu aplicación pueda repetir con seguridad.
Caution
Un proveedor integrado no vuelve a intentar un comando cuando la conexión tiene una transacción activa. Si un fallo transitorio invalida una transacción, revierte y vuelve a intentar toda la transacción. No vuelvas a intentar solo la instrucción que ha fallado.
La configuración SqlRetryLogicOption.TransientErrors reemplaza la lista de errores integrada del controlador. Para extender la línea base sin perder los valores predeterminados, véase Extender la lista de errores transitorios incorporada.