Параметры AppContext в SqlClient
Класс 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
Область применения: платформа .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 .NET Core .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 или true
false
при запуске приложения:
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);