Opzioni di AppContext in SqlClient

Scarica ADO.NET

La classe AppContext consente a SqlClient di fornire nuove funzionalità continuando a supportare i chiamanti che dipendono dal comportamento precedente. Gli utenti possono rifiutare esplicitamente una modifica di comportamento impostando opzioni di AppContext specifiche.

Forzare l'uso dei protocolli di crittografia del sistema operativo

Si applica a: .NET Framework .NET Standard

A partire da Microsoft.Data.SqlClient 4.0, TLS 1.3 non è supportato dal driver ed è stato rimosso dall'elenco dei protocolli supportati per impostazione predefinita. Gli utenti possono tornare all'uso forzato dei protocolli client del sistema operativo impostando l'opzione AppContext "Switch.Microsoft.Data.SqlClient.UseSystemDefaultSecureProtocols" su true:

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

A partire dalla versione 5.0, TLS 1.3 è supportato nelle connessioni TDS 8 senza che sia necessario usare il commutatore precedente. TDS 8 è abilitato quando Encrypt è impostato su Strict.

Abilitazione del comportamento di troncamento decimale

Si applica a: .NET Framework .NET Standard

A partire da Microsoft.Data.SqlClient 2.0, i dati decimali sono arrotondati per impostazione predefinita, come avvieni in SQL Server. Per abilitare il comportamento di troncamento precedente, è possibile impostare l'opzione di AppContext "Switch.Microsoft.Data.SqlClient.TruncateScaledDecimal" su true all'avvio dell'applicazione:

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

Abilitazione di reti gestite in Windows

Si applica a:Not supported. .NET Framework .NET Core .NET Standard

Disponibile solo a partire dalla versione 2.0.

In Windows SqlClient usa un'implementazione nativa dell'interfaccia di rete SNI per impostazione predefinita. Per abilitare l'uso dell'implementazione di SNI gestita, è possibile impostare l'opzione di AppContext "Switch.Microsoft.Data.SqlClient.UseManagedNetworkingOnWindows" su true all'avvio dell'applicazione:

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

Questa opzione attiva/disattiva il comportamento del driver per usare un'implementazione di rete gestita in progetti .NET Core 2.1+ e .NET Standard 2.0+ in Windows, eliminando tutte le dipendenze dalle librerie native per la libreria Microsoft.Data.SqlClient. È solo a scopo di test e debug.

Nota

Esistono alcune differenze note rispetto all'implementazione nativa. Ad esempio, l'implementazione gestita non supporta l'autenticazione di Windows non di dominio.

Disabilitazione della risoluzione dell'IP di rete trasparente

Si applica a: .NET Framework Not supported. .NET Core Not supported. .NET Standard

La risoluzione dell'IP di rete trasparente è una revisione della funzionalità MultiSubnetFailover esistente. Influisce sulla sequenza di connessione del driver quando il primo IP risolto del nome host non risponde e al nome host sono associati più IP. La risoluzione dell'IP di rete trasparente interagisce con MultiSubnetFailover per fornire le tre sequenze di connessione seguenti:

  • 0: Viene eseguito un tentativo con un indirizzo IP, seguito da tutti gli indirizzi IP in parallelo
  • 1: viene eseguito un tentativo per tutti gli indirizzi IP in parallelo
  • 2: Viene eseguito un tentativo con tutti gli indirizzi IP uno dopo l'altro
TransparentNetworkIPResolution MultiSubnetFailover Comportamento
Vero Vero 1
Vero False 0
Falso Vero 1
Falso Falso 2

TransparentNetworkIPResolution è abilitata per impostazione predefinita. MultiSubnetFailover è disabilitata per impostazione predefinita. Per disabilitare la risoluzione dell'IP di rete trasparente, è possibile impostare l'opzione di AppContext "Switch.Microsoft.Data.SqlClient.DisableTNIRByDefaultInConnectionString" su true all'avvio dell'applicazione:

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

Per altre informazioni sull'impostazione di queste proprietà, vedere la documentazione per la proprietà SqlConnection.ConnectionString.

Abilitazione di un timeout minimo durante l'accesso

Si applica a: .NET Framework .NET Standard

Per impedire a un tentativo di accesso di attendere indefinitamente, è possibile impostare l'opzione di AppContext "Switch.Microsoft.Data.SqlClient.UseOneSecFloorInTimeoutCalculationDuringLogin" su true all'avvio dell'applicazione:

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

Disabilitazione del comportamento di blocco di ReadAsync

Si applica a: .NET Framework .NET Standard

A partire dalla versione 3.0, ReadAsync viene eseguito in modo asincrono. Per impostazione predefinita, ReadAsync viene eseguito in modo sincrono e blocca il thread chiamante in .NET Framework. Per controllare questo comportamento di blocco, è possibile impostare l'opzione di AppContext "Switch.Microsoft.Data.SqlClient.MakeReadAsyncBlocking" su true o false all'avvio dell'applicazione:

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

Abilitare la logica di ripetizione dei tentativi configurabile

Si applica a: .NET Framework .NET Standard

Disponibile solo a partire dalla versione 3.0.

Per impostazione predefinita, la logica di ripetizione dei tentativi configurabile è disabilitata. Per abilitare questa funzionalità, impostare l'opzione AppContext Switch.Microsoft.Data.SqlClient.EnableRetryLogic su true all'avvio dell'applicazione. Questa opzione è necessaria, anche se un provider di ripetizione dei tentativi viene assegnato a una connessione o a un comando.

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

Nota

A partire da Microsoft.Data.SqlClient v4.0, l'opzione di AppContext "Switch.Microsoft.Data.SqlClient.EnableRetryLogic" non sarà più necessaria per usare la funzionalità della logica di ripetizione dei tentativi configurabile. La funzionalità è ora supportata nell'ambiente di produzione. Il comportamento predefinito della funzionalità continuerà a consistere in un criterio di non ripetizione dei tentativi, che dovrà essere sostituito dalle applicazioni client per abilitare la ripetizione dei tentativi.

Abilitazione del comportamento null di rowversion

Si applica a: .NET Framework .NET Standard

A partire dalla versione 3.0, quando un elemento rowversion ha valore null, SqlDataReader restituisce un valore DBNull anziché un oggetto byte[] vuoto. Per abilitare il comportamento legacy al fine di restituire un oggetto byte[] vuoto, abilitare l'opzione AppContext Switch.Microsoft.Data.SqlClient.LegacyRowVersionNullBehavior all'avvio dell'applicazione.

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

Eliminare gli avvisi TLS non sicuri

Si applica a: .NET Framework .NET Standard

Disponibile solo a partire dalla versione 4.0.1.

Quando si usa Encrypt=false nella stringa di connessione, viene visualizzato un avviso di sicurezza nella console se la versione TLS è 1.2 o inferiore. Questo avviso può essere eliminato abilitando l'opzione AppContext seguente all'avvio dell'applicazione:

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

Vedi anche

Classe AppContext