Partager via


Commutateurs AppContext dans SqlClient

Télécharger ADO.NET

La classe AppContext permet à SqlClient de fournir de nouvelles fonctionnalités tout en continuant à prendre en charge les appelants qui dépendent du comportement précédent. Les utilisateurs peuvent refuser un changement de comportement en définissant des commutateurs AppContext spécifiques.

Forcer l’utilisation des protocoles de chiffrement du système d’exploitation

S'applique à : .NET Framework .NET .NET Standard

À compter de Microsoft.Data.SqlClient 4.0, TLS 1.3 n'est pas pris en charge par le pilote. Il a d'ailleurs été supprimé de la liste des protocoles pris en charge par défaut. Les utilisateurs peuvent revenir à l’utilisation forcée des protocoles clients du système d’exploitation, en définissant le commutateur AppContext « Switch.Microsoft.Data.SqlClient.UseSystemDefaultSecureProtocols » sur true :

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

À compter de la version 5.0, TLS 1.3 est pris en charge dans les connexions TDS 8, sans nécessiter l’utilisation du commutateur ci-dessus. TDS 8 est activé lorsque Encrypt est défini sur Strict.

Activation du comportement de troncation décimale

S'applique à : .NET Framework .NET .NET Standard

À compter de la version 2.0 de Microsoft.Data.SqlClient, les données décimales sont arrondies par défaut, comme le fait SQL Server. Pour activer le comportement de troncation précédent, vous pouvez définir le commutateur AppContext Switch.Microsoft.Data.SqlClient.TruncateScaledDecimal sur true au démarrage de l’application :

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

Activation de la mise en réseau gérée sur Windows

S’applique à : Non pris en charge. .NET Framework .NET Core .NET Standard

(Disponible à partir de la version 2.0)

Sur Windows, SqlClient utilise une implémentation native de l’interface réseau SNI par défaut. Pour permettre l’utilisation d’une implémentation SNI gérée, vous pouvez définir le commutateur AppContext Switch.Microsoft.Data.SqlClient.UseManagedNetworkingOnWindows sur true au démarrage de l’application :

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

Ce commutateur modifie le comportement du pilote de façon à utiliser une implémentation réseau gérée dans les projets .NET Core 2.1 (et versions ultérieures) et .NET Standard 2.0 (et versions ultérieures) sur Windows, éliminant ainsi toutes les dépendances vis-à-vis de bibliothèques natives pour la bibliothèque Microsoft.Data.SqlClient. Il sert uniquement aux tests et au débogage.

Remarque

Il existe des différences connues par rapport à l’implémentation native. Par exemple, l’implémentation gérée ne prend pas en charge l’Authentification Windows sans domaine.

Désactivation de la résolution d’adresses IP réseau transparente

S’applique à : .NET Framework Non pris en charge. .NET Core Non pris en charge. .NET Standard

La résolution d’adresses IP réseau transparente (TNIR) est une révision de la fonctionnalité MultiSubnetFailover existante. Elle affecte la séquence de connexion du pilote dans le cas où la première adresse IP résolue du nom d’hôte ne répond pas et qu’il existe plusieurs adresses IP associées au nom d’hôte. Elle interagit avec MultiSubnetFailover pour fournir les trois séquences de connexion suivantes :

  • 0 : Une adresse IP est tentée, suivie de toutes les adresses IP en parallèle.
  • 1 : Toutes les adresses IP sont tentées en parallèle.
  • 2 : Toutes les adresses IP sont tentées l’une après l’autre.
TransparentNetworkIPResolution MultiSubnetFailover Comportement
True True 1
Vrai False 0
False True 1
False False 2

TransparentNetworkIPResolution est activé par défaut. MultiSubnetFailover est désactivé par défaut. Pour désactiver la résolution d’adresses IP réseau transparente, vous pouvez définir le commutateur AppContext Switch.Microsoft.Data.SqlClient.DisableTNIRByDefaultInConnectionString sur true au démarrage de l’application :

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

Pour plus d’informations sur la définition de ces propriétés, consultez la documentation relative à la propriété SqlConnection.ConnectionString.

Activation d’un délai d’expiration minimal pendant la connexion

S'applique à : .NET Framework .NET .NET Standard

Pour empêcher une tentative de connexion d’attendre indéfiniment, vous pouvez définir le commutateur AppContext Switch.Microsoft.Data.SqlClient.UseOneSecFloorInTimeoutCalculationDuringLogin sur true au démarrage de l’application :

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

Désactivation du comportement de blocage de ReadAsync

S'applique à : .NET Framework .NET .NET Standard

À compter de la version 3.0, ReadAsync s’exécute de façon asynchrone. Les versions précédentes exécutent ReadAsync de façon synchrone et bloquent le thread appelant sur .NET Framework. Pour contrôler ce comportement de blocage, vous pouvez définir le commutateur AppContext Switch.Microsoft.Data.SqlClient.MakeReadAsyncBlocking sur true ou false au démarrage de l’application :

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

Activer la logique de nouvelle tentative configurable

S'applique à : .NET Framework .NET .NET Standard

(Disponible à partir de la version 3.0)

Par défaut, la logique de nouvelle tentative configurable est désactivée. Pour activer cette fonctionnalité, définissez le commutateur AppContext Switch.Microsoft.Data.SqlClient.EnableRetryLogic sur true au démarrage de l’application. Ce commutateur est nécessaire, même si un fournisseur de nouvelles tentatives est attribué à une connexion ou à une commande.

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

Notes

À partir de Microsoft.Data.SqlClient v4.0, le commutateur AppContext « Switch.Microsoft.Data.SqlClient.EnableRetryLogic » n’est plus nécessaire pour utiliser la fonctionnalité de logique de nouvelle tentative configurable. La fonctionnalité est désormais prise en charge en production. Le comportement par défaut de la fonctionnalité continue d’être une stratégie sans nouvelle tentative. Celle-ci doit être remplacée par les applications clientes pour autoriser les nouvelles tentatives.

Activation du comportement de rowversion null

S'applique à : .NET Framework .NET .NET Standard

À partir de la version 3,0, quand un rowversion a la valeur null, SqlDataReader retourne une DBNull valeur au lieu d’un vide byte[]. Pour activer le comportement hérité de retour d’un byte[] vide, activez le commutateur AppContext Switch.Microsoft.Data.SqlClient.LegacyRowVersionNullBehavior au démarrage de l’application.

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

Supprimer l’avertissement TLS non sécurisé

S'applique à : .NET Framework .NET .NET Standard

(Disponible à partir de la version 4.0.1)

Lors de l’utilisation de Encrypt=false dans la chaîne de connexion, un avertissement de sécurité est généré dans la console si TLS a la version 1.2 ou une version antérieure. Vous pouvez supprimer cet avertissement en activant le commutateur AppContext suivant au démarrage de l’application :

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

Voir aussi

Classe AppContext