Opções de AppContext no SqlClient

Baixar ADO.NET

A classe AppContext permite que o SqlClient forneça novas funcionalidades enquanto continua dando suporte a chamadores que dependem do comportamento anterior. Os usuários podem recusar alterações no comportamento definindo opções de AppContext específicas.

Exigir o uso de protocolos de criptografia do sistema operacional

Aplicável a: .NET Framework .NET .NET Standard

A partir do Microsoft.Data.SqlClient 4.0, o TLS 1.3 não recebe mais suporte do driver e foi removido da lista de protocolos com suporte por padrão. Os usuários podem voltar para exigir o uso dos protocolos de cliente do sistema operacional, definindo a alternância de contento do aplicativo "Switch.Microsoft.Data.SqlClient.UseSystemDefaultSecureProtocols" como true:

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

A partir da versão 5.0, o TLS 1.3 tem suporte em conexões TDS 8 sem precisar usar a opção acima. O TDS 8 está habilitado quando Encrypt está definido como Strict.

Habilitar o comportamento de truncamento de decimal

Aplicável a: .NET Framework .NET .NET Standard

Começando com o Microsoft.Data.SqlClient 2.0, os dados decimais são arredondados por padrão, como é feito pelo SQL Server. Para habilitar o comportamento de truncamento anterior, você pode definir a opção de AppContext "Switch.Microsoft.Data.SqlClient.TruncateScaledDecimal" como true na inicialização do aplicativo:

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

Habilitando a rede gerenciada no Windows

Aplica-se a:Not supported. .NET Framework .NET Core .NET Standard

(Disponível começando com a versão 2.0)

No Windows, o SqlClient usa uma implementação nativa da interface de rede SNI por padrão. Para habilitar o uso de uma implementação de SNI gerenciada, você pode definir a opção de AppContext "Switch.Microsoft.Data.SqlClient.UseManagedNetworkingOnWindows" como true na inicialização do aplicativo:

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

Essa opção altera o comportamento do driver para usar a implementação de rede gerenciada em projetos do .NET Core 2.1+ e do .NET Standard 2.0+ no Windows, eliminando todas as dependências de bibliotecas nativas para a biblioteca Microsoft.Data.SqlClient. Sua finalidade é apenas de teste e depuração.

Observação

Há algumas diferenças conhecidas em comparação com a implementação nativa. Por exemplo, a implementação gerenciada não dá suporte à Autenticação do Windows fora do domínio.

Desabilitando a Resolução IP de Rede Transparente

Aplica-se a: .NET Framework Not supported. .NET Core Not supported. .NET Standard

A TNIR (Resolução IP de Rede Transparente) é uma revisão do recurso MultiSubnetFailover existente. A TNIR afeta a sequência de conexão do driver quando o primeiro IP resolvido do nome do host não responde e quando existem vários IPs associados ao nome do host. Ela interage com MultiSubnetFailover para fornecer as três seguintes sequências de conexão:

  • 0: um IP é tentado, seguido por todos os IPs em paralelo
  • 1: todos os IPs são tentados em paralelo
  • 2: todos os IPs são tentados um após o outro
TransparentNetworkIPResolution MultiSubnetFailover Comportamento
True True 1
True Falso 0
Falso True 1
Falso Falso 2

TransparentNetworkIPResolution é habilitado por padrão. MultiSubnetFailover é desabilitado por padrão. Para desabilitar a TNIR, você pode definir a opção de AppContext "Switch.Microsoft.Data.SqlClient.DisableTNIRByDefaultInConnectionString" como true na inicialização do aplicativo:

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

Para obter mais informações sobre como definir essas propriedades, confira a documentação da Propriedade SqlConnection.ConnectionString.

Habilitar um tempo limite mínimo durante o logon

Aplicável a: .NET Framework .NET .NET Standard

Para evitar que uma tentativa de logon aguarde indefinidamente, você pode definir a opção de AppContext Switch.Microsoft.Data.SqlClient.UseOneSecFloorInTimeoutCalculationDuringLogin como true na inicialização do aplicativo:

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

Desabilitar o comportamento de bloqueio do ReadAsync

Aplicável a: .NET Framework .NET .NET Standard

A partir da versão 3.0, o ReadAsync é executado de forma assíncrona. As versões anteriores executam ReadAsync de forma síncrona e bloqueiam o thread de chamada em .NET Framework. Para desabilitar esse comportamento de bloqueio, você pode definir a opção de AppContext Switch.Microsoft.Data.SqlClient.MakeReadAsyncBlocking como true ou false na inicialização do aplicativo:

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

Habilitar lógica de repetição configurável

Aplicável a: .NET Framework .NET .NET Standard

(Disponível começando com a versão 3.0)

Por padrão, a lógica de repetição configurável fica desabilitada. Para habilitar esse recurso, defina a opção do AppContext Switch.Microsoft.Data.SqlClient.EnableRetryLogic como true na inicialização do aplicativo. Essa opção é necessária, mesmo que um provedor de repetição seja atribuído a uma conexão ou a um comando.

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

Observação

A partir do Microsoft.Data.SqlClient v4.0, a alternância de contexto do aplicativo "Switch.Microsoft.Data.SqlClient.EnableRetryLogic" não será mais necessária para usar o recurso lógico de repetição configurável. Agora há suporte para o recurso na produção. O comportamento padrão do recurso continuará sendo uma política de não nova tentativa, que precisará ser substituído por aplicativos cliente para habilitar as recuperações.

Habilitar o comportamento nulo da versão de linha

Aplicável a: .NET Framework .NET .NET Standard

A partir da versão 3.0, quando uma versão de linha tem um valor nulo, SqlDataReader retorna um valor DBNull em vez de um byte[] vazio. Para habilitar o comportamento herdado de retornar um byte[] vazio, habilite o seguinte comutador AppContext Switch.Microsoft.Data.SqlClient.LegacyRowVersionNullBehavior na inicialização do aplicativo.

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

Suprimir aviso TLS inseguro

Aplicável a: .NET Framework .NET .NET Standard

(Disponível a partir da versão 4.0.1)

Ao usar Encrypt=false na cadeia de conexão, um aviso de segurança será apresentado ao console se a versão do TLS for 1.2 ou inferior. Esse aviso pode ser suprimido habilitando o seguinte comutador AppContext na inicialização do aplicativo:

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

Confira também

Classe AppContext