Opzioni di AppContext in SqlClient
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 .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 .NET Standard
A partire da Microsoft.Data.SqlClient 2.0, i dati decimali vengono arrotondati per impostazione predefinita, come avviene 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: .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 o disattiva il comportamento del driver in modo da 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. Questa opzione viene usata solo per scopi 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 .NET Core .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 .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 .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 .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);
- Per informazioni su come abilitare l'opzione usando un file di configurazione, vedere Abilitare l'opzione di sicurezza.
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 .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 .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);