Archivo de configuración de lógica de reintento configurable con SqlClient

Se aplica a: .NET Framework .NET .NET Standard

Descargar ADO.NET

El método de reintento predeterminado cuando el modificador de seguridad está habilitado es SqlConfigurableRetryFactory.CreateNoneRetryProvider para SqlConnection y SqlCommand. Puede especificar otro método de reintento mediante un archivo de configuración.

Secciones de configuración

Las opciones predeterminadas de lógica de reintento para una aplicación se pueden cambiar agregando las secciones siguientes en la sección configSections del archivo de configuración:

  • SqlConfigurableRetryLogicConnection: para especificar la lógica de reintento predeterminada de SqlConnection.
<section name="SqlConfigurableRetryLogicConnection"
        type="Microsoft.Data.SqlClient.SqlConfigurableRetryConnectionSection, Microsoft.Data.SqlClient"/>
  • SqlConfigurableRetryLogicCommand: para especificar la lógica de reintento predeterminada de SqlCommand.
<section name="SqlConfigurableRetryLogicCommand"
        type="Microsoft.Data.SqlClient.SqlConfigurableRetryCommandSection, Microsoft.Data.SqlClient"/>
  • AppContextSwitchOverrides: .NET Framework admite modificadores de AppContext mediante una sección AppContextSwitchOverrides, que no es necesario definir de forma explícita. Para activar un modificador en .NET Core, debe especificar esta sección.
<section name="AppContextSwitchOverrides"
        type="Microsoft.Data.SqlClient.AppContextSwitchOverridesSection, Microsoft.Data.SqlClient"/>

Nota:

Se deben especificar las configuraciones siguientes en la sección configuration. Declare estas nuevas secciones para configurar la lógica de reintento predeterminada mediante un archivo de configuración de la aplicación.

Habilitación del modificador de seguridad

Nota:

A partir de Microsoft.Data.SqlClient v4.0, el cambio de contexto de aplicación "Switch.Microsoft.Data.SqlClient.EnableRetryLogic" ya no será necesario para usar la característica lógica de reintento configurable. La característica ahora se admite en producción. El comportamiento predeterminado de la característica seguirá siendo una directiva sin reintentos, que las aplicaciones cliente tendrán que invalidar para habilitar los reintentos.

Puede habilitar el modificador de seguridad mediante un archivo de configuración. Para obtener información sobre cómo habilitarlo mediante el código de la aplicación, consulte Habilitación de lógica de reintento configurable.

<runtime>
    <AppContextSwitchOverrides value="Switch.Microsoft.Data.SqlClient.EnableRetryLogic=true"/>
</runtime>
  • .NET Core: admite varios modificadores delimitados por punto y coma (;) como .NET Framework.
<AppContextSwitchOverrides value="Switch.Microsoft.Data.SqlClient.EnableRetryLogic=true"/>

Sección de conexión

Los siguientes atributos se pueden usar para especificar la lógica de reintento predeterminada para todas las instancias de SqlConnection en una aplicación:

  • numberOfTries: establece el número de veces que se va a intentar.

  • deltaTime: establece el intervalo de tiempo de rango como un objeto TimeSpan.

  • minTime: establece el intervalo de tiempo de rango mínimo permitido como un objeto TimeSpan.

  • maxTime: establece el intervalo de tiempo de rango máximo permitido como un objeto TimeSpan.

  • transientErrors: establece la lista de números de error transitorio en los que se va a reintentar.

  • retryMethod: especifica un creador de método de reintento que recibe la configuración de reintento mediante un parámetro SqlRetryLogicOption y devuelve un objeto SqlRetryLogicBaseProvider.

  • retryLogicType: establece un proveedor de lógica de reintento personalizado, que contiene los creadores de método de reintento que proporcionan retryMethod. Estos métodos deben cumplir los criterios de retryMethod. Se debe usar el nombre de tipo completo del proveedor. Para obtener más información, consulte Especificar nombres de tipo completos.

Nota:

No es necesario especificar retryLogicType si usa los proveedores de reintento integrados. Para buscar los proveedores de reintentos integrados, consulte Proveedores de lógica de reintento internos en SqlClient.

Sección de comandos

El atributo siguiente también puede establecerse para todas las instancias de SqlCommand en una aplicación:

  • authorizedSqlCondition: establece una expresión regular anterior al reintento para SqlCommand.CommandText que filtra instrucciones SQL específicas.

Nota:

La expresión regular distingue mayúsculas de minúsculas.

Ejemplos

  • Intenta establecer una conexión hasta tres veces con un retraso aproximado de 1 segundo entre intentos mediante el método SqlConfigurableRetryFactory.CreateFixedRetryProvider y la lista de errores transitorios predeterminada:

    <SqlConfigurableRetryLogicConnection retryMethod ="CreateFixedRetryProvider" 
                                            numberOfTries ="3" deltaTime ="00:00:01"/>
    
  • Intenta establecer una conexión hasta cinco veces con un retraso de hasta 45 segundos entre intentos mediante el método SqlConfigurableRetryFactory.CreateExponentialRetryProvider y la lista de errores transitorios predeterminada:

    <SqlConfigurableRetryLogicConnection retryMethod ="CreateExponentialRetryProvider" 
                        numberOfTries ="5" deltaTime ="00:00:03" maxTime ="00:00:45"/>
    
  • Intenta ejecutar un comando hasta cuatro veces con un retraso de entre 2 y 30 segundos mediante el método SqlConfigurableRetryFactory.CreateIncrementalRetryProvider y la lista de errores transitorios predeterminada:

    <SqlConfigurableRetryLogicCommand retryMethod ="CreateIncrementalRetryProvider"
                        numberOfTries ="4" deltaTime ="00:00:02" maxTime ="00:00:30"/>
    
  • Intenta ejecutar un comando hasta ocho veces con un retraso de un segundo a un minuto. Solo se pueden usar comandos con CommandText que contienen la palabra SELECT y los números de excepción 102 o 997. Usa el método integrado SqlConfigurableRetryFactory.CreateIncrementalRetryProvider:

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

Nota:

En los dos ejemplos siguientes, puede encontrar el código fuente de la lógica de reintento personalizada de API de núcleo con lógica de reintento configurable en SqlClient. Se supone que el método CreateCustomProvider se define en la clase CustomCRL_Doc.CustomRetry del ensamblado CustomCRL_Doc.dll que se encuentra en el directorio de ejecución de la aplicación.

  • Intenta establecer una conexión hasta cinco veces, con un retraso de entre 3 y 45 segundos, con los números de error 4060, 997 y 233 en la lista y mediante el proveedor de reintento personalizado especificado:

    <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"/>
    
  • Este ejemplo se comporta como el anterior:

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

Nota:

Los proveedores de lógica de reintento se almacenarán en caché al usarse por primera vez en una conexión o un comando para un uso futuro durante la duración de una aplicación.

Nota:

Los errores que se produzcan al leer un archivo de configuración de la aplicación para la configuración de la lógica de reintento no provocarán errores en la aplicación. En su lugar, se usará SqlConfigurableRetryFactory.CreateNoneRetryProvider de forma predeterminada.

Puede usar el seguimiento del origen de eventos para comprobar o solucionar problemas relacionados con la configuración de la lógica de reintento. Para obtener más información, consulte Habilitación del seguimiento de eventos en SqlClient.

Vea también