Dela via


Användning av AppContext-omkopplare i SqlClient

Gäller för: .NET Framework .NET .NET Standard

Ladda ned ADO.NET

Klassen AppContext gör att SqlClient kan tillhandahålla nya funktioner samtidigt som de fortsätter att stödja anropare som är beroende av det tidigare beteendet. Användare kan välja bort en ändring av beteendet genom att ange specifika AppContext-växlar.

Aktivera MultiSubnetFailover som standard

Gäller för: .NET Framework; .NET; .NET Standard

(Tillgänglig från och med version 7.0)

Om du vill ange MultiSubnetFailover=true globalt utan att ändra enskilda anslutningssträngar kan du ange AppContext-växeln "Switch.Microsoft.Data.SqlClient.EnableMultiSubnetFailoverByDefault" till true vid programstart:

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

Du kan också aktivera den här växeln i din App.Config:

<runtime>
  <AppContextSwitchOverrides value="Switch.Microsoft.Data.SqlClient.EnableMultiSubnetFailoverByDefault=true" />
</runtime>

När det är aktiverat fungerar alla anslutningar som om MultiSubnetFailover=true är inställd i anslutningssträngen. Den här växeln är inaktiverad som standard.

Aktivera paket multiplexering för asynkrona läsningar

Gäller för: .NET Framework; .NET; .NET Standard

(Tillgänglig från och med version 7.0)

Multipling av paket förbättrar prestanda för stora asynkrona läsåtgärder, till exempel ExecuteReaderAsync med stora resultatuppsättningar, scenarier för direktuppspelning eller massdatahämtning. Den här funktionen styrs av två aktiveringsbara AppContext-växlar. Om du anger båda växlarna till false aktiveras den nya asynkrona bearbetningssökvägen:

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

Som standard är truebåda växlarna , vilket bevarar det befintliga (kompatibla) beteendet.

Aktivera användaragentens funktionstillägg

Gäller för: .NET Framework; .NET; .NET Standard

(Tillgänglig från och med version 7.0)

När AppContext-växeln "Switch.Microsoft.Data.SqlClient.EnableUserAgent" är aktiverad skickar drivrutinen information om användaragenten till servern som en del av anslutningen. Den här informationen hjälper till med felsökning och kvantifiering av drivrutinsanvändning efter version och operativsystem. Den här växeln är inaktiverad som standard. Om du vill aktivera det anger du AppContext-växeln till true vid programstart:

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

Aktivera beteende för decimalt trunkering

Gäller för: .NET Framework; .NET; .NET Standard

Från och med Microsoft.Data.SqlClient 2.0 avrundas decimaldata som standard, vilket görs av SQL Server. Om du vill aktivera det tidigare beteendet för trunkering kan du ange AppContext-växeln "Switch.Microsoft.Data.SqlClient.TruncateScaledDecimal" till true vid programstart:

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

Aktivera hanterat nätverk i Windows

Gäller för: .NET; .NET Standard

(Tillgänglig från och med version 2.0)

I Windows använder SqlClient en intern implementering av SNI-nätverksgränssnittet som standard. Om du vill aktivera användningen av en hanterad SNI-implementering kan du ange AppContext-växeln "Switch.Microsoft.Data.SqlClient.UseManagedNetworkingOnWindows" till true vid programstart:

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

Den här växeln växlar drivrutinsbeteendet för att använda en implementering av hanterade nätverk i .NET Core 2.1+ och .NET Standard 2.0+-projekt i Windows, vilket eliminerar alla beroenden för interna bibliotek för Microsoft.Data.SqlClient-biblioteket. Det är endast för testning och felsökning.

Anmärkning

Det finns några kända skillnader jämfört med den interna implementeringen. Den hanterade implementeringen stöder till exempel inte Windows-autentisering som inte är domän.

Inaktivera transparent nätverks-IP-upplösning

Gäller för: .NET Framework

Transparent nätverks-IP-upplösning (TNIR) är en revision av den befintliga MultiSubnetFailover-funktionen. TNIR påverkar drivrutinens anslutningssekvens om den första lösta IP-adressen för värdnamnet inte svarar och det finns flera IP-adresser som är associerade med värdnamnet. TNIR interagerar med MultiSubnetFailover för att tillhandahålla följande tre anslutningssekvenser:

  • 0: En IP-adress försöks, följt av att alla IP-adresser försöks parallellt
  • 1: Alla IP-adresser prövas parallellt
  • Alla IP-adresser försöks med en efter en
Transparent nätverks-IP-upplösning MultiSubnetFailover Beteende
Sann Sann 1
Sann Falsk 0
Falsk Sann 1
Falsk Falsk 2

TransparentNetworkIPResolution är aktiverat som standard. MultiSubnetFailover är inaktiverat som standard. Om du vill inaktivera TNIR kan du ange AppContext-växeln "Switch.Microsoft.Data.SqlClient.DisableTNIRByDefaultInConnectionString" till true vid programstart:

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

Mer information om hur du anger dessa egenskaper finns i dokumentationen för egenskapen SqlConnection.ConnectionString.

Aktivera en minsta tidsgräns under inloggningen

Gäller för: .NET Framework; .NET; .NET Standard

Om du vill förhindra att ett inloggningsförsök väntar på obestämd tid kan du ställa in AppContext-växeln Switch.Microsoft.Data.SqlClient.UseOneSecFloorInTimeoutCalculationDuringLogin till true vid programstart:

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

Inaktivera blockerande beteende för ReadAsync

Gäller för: .NET Framework; .NET; .NET Standard

Från och med version 3.0 körs ReadAsync asynkront. Tidigare versioner kör ReadAsync synkront och blockerar den anropande tråden i .NET Framework. Om du vill styra det här blockerande beteendet kan du ange Växeln För AppContext Switch.Microsoft.Data.SqlClient.MakeReadAsyncBlocking till true eller false vid programstart:

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

Aktivera rowversion null-beteende

Gäller för: .NET Framework; .NET; .NET Standard

Från och med version 3.0, när en radversion har värdet null, SqlDataReader returneras ett DBNull värde i stället för ett tomt byte[]. Aktivera det äldre beteendet att returnera en tom byte[]genom att aktivera AppContext-växeln Switch.Microsoft.Data.SqlClient.LegacyRowVersionNullBehavior vid programstart.

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

Ignorera osäker TLS-varning

Gäller för: .NET Framework; .NET; .NET Standard

(Tillgänglig från och med version 4.0.1)

När du använder Encrypt=false i anslutningssträngen skickas en säkerhetsvarning till konsolen om TLS-versionen är 1.2 eller lägre. Den här varningen kan ignoreras genom att aktivera följande AppContext-växel vid programstart:

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

Ignorera server som tillhandahålls av redundanspartner

Gäller för: .NET Framework; .NET; .NET Standard

(Tillgänglig från och med versionerna 5.1.8, 6.0.4 och 6.1.3)

Vid failover föredras failoverpartnerinformation som tillhandahålls av servern framför failoverpartnerinformation som anges i anslutningssträngen. Om du vill ignorera failover-partnerinformation som tillhandahålls av servern och endast överväga failover-partnerinformation som anges i anslutningssträngen, aktiverar du den här AppContext-omkopplaren vid programstart:

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

Se även

AppContext-klass