Modificadores de AppContext en SqlClient

Descargar ADO.NET

La clase AppContext permite que SqlClient proporcione una nueva función a la vez que sigue siendo compatible con autores de llamada que dependen del comportamiento anterior. Los usuarios pueden no participar de un cambio de comportamiento estableciendo modificadores de AppContext específicos.

Uso forzado de protocolos de cifrado de sistema operativo

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

A partir de Microsoft.Data.SqlClient 4.0, TLS 1.3 no es compatible con el controlador y quitó de la lista de protocolos admitidos de forma predeterminada. Los usuarios pueden volver a forzar el uso de los protocolos de cliente del sistema operativo estableciendo el cambio de AppContext "Switch.Microsoft.Data.SqlClient.UseSystemDefaultSecureProtocols" en true:

AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.UseSystemDefaultSecureProtocols", true);

A partir de la versión 5.0, TLS 1.3 se admite en las conexiones TDS 8 sin tener que usar el modificador anterior. TDS 8 está habilitado cuando Encrypt se establece en Strict.

Habilitación del comportamiento de truncamiento decimal

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

A partir de Microsoft.Data.SqlClient 2.0, los datos decimales se redondean de forma predeterminada, tal como lo hace SQL Server. Para habilitar el comportamiento anterior del truncamiento, puede establecer el modificador de AppContext "Switch.Microsoft.Data.SqlClient.TruncateScaledDecimal" en true en el inicio de la aplicación:

AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.TruncateScaledDecimal", true);

Habilitación de redes administradas en Windows

Se aplica a:Not supported. .NET Framework .NET Core .NET Standard

(Disponible a partir de la versión 2.0).

En Windows, SqlClient utiliza de forma predeterminada una implementación nativa de la interfaz de red SNI. Para habilitar el uso de una implementación de SNI administrada, puede establecer el modificador de AppContext "Switch.Microsoft.Data.SqlClient.UseManagedNetworkingOnWindows" en true en el inicio de la aplicación:

AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.UseManagedNetworkingOnWindows", true);

Este modificador alterna el comportamiento del controlador a fin de usar una implementación de red administrada en los proyectos de .NET Core 2.1+ y .NET Standard 2.0+ en Windows, eliminando todas las dependencias de las bibliotecas nativas para la biblioteca Microsoft.Data.SqlClient. Es solo para fines de prueba y depuración.

Nota:

Hay algunas diferencias conocidas en comparación con la implementación nativa. Por ejemplo, la implementación administrada no admite la autenticación de Windows que no sea de dominio.

Deshabilitación de la resolución de IP de red transparente

Se aplica a: .NET Framework Not supported. .NET Core Not supported. .NET Standard

La resolución de IP de red transparente (TNIR) es una revisión de la característica MultiSubnetFailover existente. TNIR afecta la secuencia de conexión del controlador cuando la primera dirección IP resuelta del nombre de host no responde y hay varias direcciones IP asociadas con el nombre de host. TNIR interactúa con MultiSubnetFailover para proporcionar las tres secuencias de conexión siguientes:

  • 0: se intenta una IP, seguida de todas las direcciones IP en paralelo.
  • 1: todas las direcciones IP se intentan en paralelo.
  • 2: todas las direcciones IP se intentan una tras otra.
TransparentNetworkIPResolution MultiSubnetFailover Comportamiento
True True 1
True False 0
False True 1
False False 2

TransparentNetworkIPResolution está habilitado de forma predeterminada. MultiSubnetFailover está deshabilitado de forma predeterminada. Para deshabilitar TNIR, puede establecer el modificador de AppContext "Switch.Microsoft.Data.SqlClient.DisableTNIRByDefaultInConnectionString" en true en el inicio de la aplicación:

AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.DisableTNIRByDefaultInConnectionString", true);

Para obtener más información sobre cómo establecer estas propiedades, vea la documentación de la Propiedad SqlConnection.ConnectionString.

Habilitación de un tiempo de espera mínimo durante el inicio de sesión

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

Para evitar que un intento de inicio de sesión espere indefinidamente, puede establecer el modificador de AppContext Switch.Microsoft.Data.SqlClient.UseOneSecFloorInTimeoutCalculationDuringLogin en true en el inicio de la aplicación:

AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.UseOneSecFloorInTimeoutCalculationDuringLogin", false);

Deshabilitación del comportamiento de bloqueo de ReadAsync

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

A partir de la versión 3.0, ReadAsync se ejecuta de forma asincrónica. Las versiones anteriores ejecutan ReadAsync de forma sincrónica y bloquean el subproceso de llamada en .NET Framework. Para controlar este comportamiento de bloqueo, puede establecer el modificador de AppContext Switch.Microsoft.Data.SqlClient.MakeReadAsyncBlocking en true o false en el inicio de la aplicación:

AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.MakeReadAsyncBlocking", false);

Habilitación de la lógica de reintento configurable

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

(Disponible a partir de la versión 3.0).

La lógica de reintento configurable está deshabilitada de forma predeterminada. Para habilitar esta característica, establezca el modificador de AppContext Switch.Microsoft.Data.SqlClient.EnableRetryLogic en true en el inicio de la aplicación. Este modificador es necesario, incluso si se asigna un proveedor de reintentos a una conexión o un comando.

AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.EnableRetryLogic", true);

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.

Habilitación del comportamiento NULL de la versión de fila

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

A partir de la versión 3.0, cuando una versión de fila tiene un valor de NULL, SqlDataReader devuelve un valor DBNull en lugar de un valor byte[] vacío. Para habilitar el comportamiento heredado de devolver un byte[] vacío, habilite el modificador de AppContext Switch.Microsoft.Data.SqlClient.LegacyRowVersionNullBehavior al iniciar la aplicación.

AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.LegacyRowVersionNullBehavior", true);

Supresión de advertencia de TLS no segura

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

(Disponible a partir de la versión 4.0.1).

Cuando se usa Encrypt=false en la cadena de conexión, se genera una advertencia de seguridad en la consola si la versión de TLS es 1.2 o inferior. Esta advertencia se puede suprimir habilitando el siguiente modificador de AppContext en el inicio de la aplicación:

AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.SuppressInsecureTLSWarning", true);

Consulte también

Clase AppContext