Параметры AppContext в SqlClient

Скачать ADO.NET

Класс AppContext позволяет SqlClient предоставлять новые функциональные возможности, продолжая поддерживать вызывающие объекты, которые зависят от предыдущего поведения. Пользователи могут отказаться от изменения в поведении, задав определенные параметры AppContext.

Принудительное использование протоколов шифрования операционной системы

Применимо: платформа .NET Framework .NET Standard

Начиная с Microsoft.Data.SqlClient 4.0, TLS 1.3 не поддерживается драйвером и по умолчанию удален из списка поддерживаемых протоколов. Пользователи могут переключиться обратно на принудительное использование клиентских протоколов операционной системы, задав для параметра-переключателя AppContext Switch.Microsoft.Data.SqlClient.UseSystemDefaultSecureProtocols значение true:

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

Начиная с версии 5.0 TLS 1.3 поддерживается в подключениях TDS 8 без необходимости использования указанного выше переключателя. TDS 8 включается, если для параметра Encrypt задается значение Strict.

Включение усечения десятичных чисел

Применимо: платформа .NET Framework .NET Standard

Начиная с Microsoft.Data.SqlClient 2.0 десятичные данные округляются по умолчанию, как и в SQL Server. Чтобы включить предыдущее поведение усечения, при запуске приложения можно задать для параметра AppContext Switch.Microsoft.Data.SqlClient.TruncateScaledDecimal значение true.

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

Включение управляемых сетей в Windows

Область применения:Not supported. .NET Framework .NET Core .NET Standard

(Доступно начиная с версии 2.0)

В Windows SqlClient по умолчанию использует собственную реализацию сетевого интерфейса SNI. Чтобы разрешить использование управляемой реализации SNI, при запуске приложения можно задать для параметра AppContext Switch.Microsoft.Data.SqlClient.UseManagedNetworkingOnWindows значение true.

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

Этот параметр переключает поведение драйвера на использование управляемой сетевой реализации в .NET Core 2.1+ и .NET Standard 2.0+ в Windows, устраняя все зависимости от собственных библиотек для библиотек Microsoft.Data.SqlClient. Он предназначен только для тестирования и отладки.

Примечание.

При сравнении с собственной реализацией существуют некоторые известные различия. Например, управляемая реализация не поддерживает проверку подлинности Windows без домена.

Отключение разрешения IP-адресов прозрачной сети

Область применения: .NET Framework Not supported. .NET Core Not supported. .NET Standard

Разрешение IP-адресов прозрачной сети (TNIR) является исправленной версией существующей функции MultiSubnetFailover. TNIR влияет на последовательность подключений драйвера, когда первый разрешенный IP-адрес имени узла не отвечает и имеется несколько IP-адресов, связанных с именем этого узла. TNIR взаимодействует с MultiSubnetFailover и поддерживает следующие три варианта последовательности подключений.

  • 0: один IP-адрес пытается выполнить, а затем все IP-адреса параллельно
  • 1. Все IP-адреса выполняются параллельно
  • 2. Все IP-адреса пытаются один за другим
TransparentNetworkIPResolution MultiSubnetFailover Поведение
Истина Истина 1
Истина Ложь 0
False Истина 1
False False 2

По умолчанию transparentNetworkIPResolution имеет значение true. Параметр MultiSubnetFailover отключен по умолчанию. Чтобы отключить TNIR, при запуске приложения можно задать для параметра AppContext Switch.Microsoft.Data.SqlClient.DisableTNIRByDefaultInConnectionString значение true.

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

Дополнительные сведения об установке этих свойств см. в документации по свойству SqlConnection.ConnectionString.

Включение минимального времени ожидания при входе

Применимо: платформа .NET Framework .NET Standard

Чтобы предотвратить неограниченное время ожидания входа, при запуске приложения можно задать для параметра AppContext Switch.Microsoft.Data.SqlClient.UseOneSecFloorInTimeoutCalculationDuringLogin значение true.

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

Отключение блокирующего поведения ReadAsync

Применимо: платформа .NET Framework .NET Standard

Начиная с версии 3.0, ReadAsync выполняется асинхронно. Предыдущие версии запускают ReadAsync синхронно и блокируют вызывающий поток в платформа .NET Framework. Чтобы управлять этим поведением блокировки, можно задать переключатель AppContext Switch.Microsoft.Data.SqlClient.MakeReadAsyncBlocking или truefalse при запуске приложения:

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

Включение настраиваемой логики повторных попыток

Применимо: платформа .NET Framework .NET Standard

(Доступно начиная с версии 3.0)

По умолчанию настраиваемая логика повторных попыток отключена. Чтобы включить эту возможность, задайте в AppContext для переключателя Switch.Microsoft.Data.SqlClient.EnableRetryLogic значение true при запуске приложения. Этот переключатель является обязательным, даже если для открытия подключения или выполнения команды назначен поставщик логики повторных попыток.

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

Примечание.

Начиная с Microsoft.Data.SqlClient 4.0, переключение контекста приложения Switch.Microsoft.Data.SqlClient.EnableRetryLogic больше не будет требоваться для использования настраиваемой функции логики повторных попыток. Теперь эта функция поддерживается в рабочей среде. По умолчанию функция по-прежнему будет определяться политикой запрета повторных попыток, что необходимо будет переопределить клиентскими приложениями, чтобы разрешить повторные попытки.

Включение поведения при значении rowversion — NULL

Применимо: платформа .NET Framework .NET Standard

Начиная с версии 3.0, если rowversion имеет значение NULL, SqlDataReader возвращает значение DBNull вместо пустого byte[]. Чтобы включить предыдущее поведение, когда возвращался пустой byte[], включите переключатель AppContext Switch.Microsoft.Data.SqlClient.LegacyRowVersionNullBehavior при запуске приложения.

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

Скрытие предупреждения о небезопасном протоколе TLS

Применимо: платформа .NET Framework .NET Standard

(Доступно начиная с версии 4.0.1)

При использовании Encrypt=false в строке подключения в консоль выводится предупреждение безопасности, если используется TLS 1.2 или более ранней версии. Это предупреждение можно скрыть, включив следующий параметр AppContext при запуске приложения:

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

См. также

Класс AppContext