Teilen über


AppContext-Optionen in SqlClient

Herunterladen von ADO.NET

Die AppContext-Klasse ermöglicht SqlClient das Bereitstellen neuer Funktionen, während weiterhin Aufrufer unterstützt werden, die vom vorherigen Verhalten abhängen. Benutzer können sich gegen Änderungen am Verhalten entscheiden, indem Sie bestimmte AppContext-Optionen festlegen.

Erzwingen der Verwendung von Verschlüsselungsprotokollen des Betriebssystems

Gilt für: .NET Framework .NET .NET Standard

Ab Microsoft.Data.SqlClient 4.0 wird TLS 1.3 vom Treiber nicht mehr unterstützt und wurde standardmäßig aus der Liste der unterstützten Protokolle entfernt. Benutzer können die Verwendung der Clientprotokolle des Betriebssystems wieder erzwingen, indem sie die AppContext-Option Switch.Microsoft.Data.SqlClient.UseSystemDefaultSecureProtocols auf TRUE festlegen:

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

Ab Version 5.0 wird TLS 1.3 in TDS 8-Verbindungen unterstützt, ohne den obigen Schalter verwenden zu müssen. TDS 8 ist aktiviert, wenn Encrypt auf Strict festgelegt ist.

Aktivieren des Kürzungsverhaltens für Dezimalzahlen

Gilt für: .NET Framework .NET .NET Standard

Ab Microsoft.Data.SqlClient 2.0 werden Dezimaldaten wie bei SQL Server standardmäßig gerundet. Sie können die AppContext-Option "Switch.Microsoft.Data.SqlClient.TruncateScaledDecimal" beim Anwendungsstart auf true festlegen, um das vorherige Kürzungsverhalten zu aktivieren:

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

Aktivieren verwalteter Netzwerke unter Windows

Gilt für: Nicht unterstützt. .NET Framework .NET Core .NET Standard

(Verfügbar ab Version 2.0)

Unter Windows verwendet SqlClient standardmäßig eine native Implementierung der SNI-Netzwerkschnittstelle. Sie können die AppContext-Option "Switch.Microsoft.Data.SqlClient.UseManagedNetworkingOnWindows" beim Anwendungsstart auf true festlegen, um die Verwendung einer verwalteten SNI-Implementierung zu aktivieren:

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

Diese Option schaltet das Verhalten des Treibers so um, dass in Projekten in .NET Core 2.1 und höher und in .NET Standard 2.0 und höher unter Windows eine verwaltete Netzwerkimplementierung verwendet wird. Dies beseitigt alle Abhängigkeiten von nativen Bibliotheken für die Microsoft.Data.SqlClient-Bibliothek. Die Option ist nur für Test- und Debugzwecke vorgesehen.

Hinweis

Im Vergleich zur nativen Implementierung gibt es einige bekannte Unterschiede. Beispielsweise unterstützt die verwaltete Implementierung nicht die Windows-Authentifizierung ohne Domäne.

Deaktivieren der transparenten Netzwerk-IP-Adressauflösung

Gilt für: .NET Framework Wird nicht unterstützt. .NET Core Wird nicht unterstützt. .NET Standard

Die transparente Netzwerk-IP-Adressauflösung (Transparent Network IP Resolution, TNIR) ist eine Überarbeitung des vorhandenen MultiSubnetFailover-Features. TNIR wirkt sich auf die Verbindungssequenz des Treibers aus, wenn die erste aufgelöste IP-Adresse des Hostnamens nicht reagiert und dem Hostnamen mehrere IP-Adressen zugeordnet sind. TNIR interagiert mit MultiSubnetFailover, um die folgenden drei Verbindungssequenzen bereitzustellen:

  • 0: Erst wird eine IP-Adresse ausprobiert, dann alle IP-Adressen gleichzeitig.
  • 1: Die IP-Adressen werden alle gleichzeitig ausprobiert.
  • 2: Die IP-Adressen werden alle nacheinander ausprobiert.
TransparentNetworkIPResolution MultiSubnetFailover Verhalten
True True 1
Richtig False 0
False True 1
False False 2

TransparentNetworkIPResolution ist in der Standardeinstellung aktiviert. MultiSubnetFailover ist in der Standardeinstellung deaktiviert. Sie können die AppContext-Option "Switch.Microsoft.Data.SqlClient.DisableTNIRByDefaultInConnectionString" beim Anwendungsstart auf true festlegen, um TNIR zu deaktivieren:

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

Weitere Informationen zum Festlegen dieser Eigenschaften finden Sie in der Dokumentation zur SqlConnection.ConnectionString-Eigenschaft.

Aktivieren eines minimalen Timeouts bei der Anmeldung

Gilt für: .NET Framework .NET .NET Standard

Sie können die AppContext-Option Switch.Microsoft.Data.SqlClient.UseOneSecFloorInTimeoutCalculationDuringLogin beim Anwendungsstart auf true festlegen, um zu verhindern, dass bei einem Anmeldeversuch unbegrenzt gewartet wird:

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

Deaktivieren des blockierenden Verhaltens von ReadAsync

Gilt für: .NET Framework .NET .NET Standard

Ab Version 3.0 wird ReadAsync asynchron ausgeführt. Frühere Versionen führen ReadAsync synchron aus und blockieren den aufrufenden Thread auf .NET Framework. Sie können die AppContext-Option Switch.Microsoft.Data.SqlClient.MakeReadAsyncBlocking beim Anwendungsstart auf true oder false festlegen, um dieses blockierende Verhalten zu steuern:

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

Aktivieren der konfigurierbaren Wiederholungslogik

Gilt für: .NET Framework .NET .NET Standard

(Verfügbar ab Version 3.0)

Die konfigurierbare Wiederholungslogik ist standardmäßig deaktiviert. Wenn Sie dieses Feature aktivieren möchten. legen Sie die AppContext-Option Switch.Microsoft.Data.SqlClient.EnableRetryLogic beim Anwendungsstart auf true fest. Diese Option ist auch dann erforderlich, wenn ein Wiederholungsanbieter einer Verbindung oder einem Befehl zugewiesen wird.

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

Hinweis

Ab Microsoft.Data.SqlClient v4.0 ist die App-Kontextoption „Switch.Microsoft.Data.SqlClient.EnableRetryLogic“ nicht mehr erforderlich, um das Feature der konfigurierbaren Wiederholungslogik zu verwenden. Das Feature wird jetzt in der Produktion unterstützt. Das Standardverhalten des Features ist weiterhin eine Nicht-Wiederholungsrichtlinie, die von Clientanwendungen überschrieben werden muss, um Wiederholungen zu ermöglichen.

Aktivieren des Nullverhaltens von „rowversion“

Gilt für: .NET Framework .NET .NET Standard

Ab Version 3.0 wird von SqlDataReader, wenn „rowversion“ den Wert NULL aufweist, ein DBNull-Wert anstelle eines leeren byte[] zurückgegeben. Wenn wie früher ein leeres byte[] zurückgegeben werden soll, aktivieren Sie die AppContext-Option Switch.Microsoft.Data.SqlClient.LegacyRowVersionNullBehavior beim Anwendungsstart.

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

Unterdrücken von Warnungen zu unsicherem TLS

Gilt für: .NET Framework .NET .NET Standard

(Verfügbar ab Version 4.0.1)

Bei Verwendung von Encrypt=false in der Verbindungszeichenfolge wird eine Sicherheitswarnung an die Konsole ausgegeben, wenn TLS-Version 1.2 oder niedriger verwendet wird. Diese Warnung kann unterdrückt werden, indem beim Start der Anwendung die folgende AppContext-Option aktiviert wird:

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

Weitere Informationen

AppContext-Klasse