Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: .NET Framework
.NET .NET
Standard
Класс AppContext позволяет SqlClient предоставлять новые функциональные возможности, продолжая поддерживать вызывающие объекты, которые зависят от предыдущего поведения. Пользователи могут отказаться от изменения в поведении, задав определенные параметры AppContext.
Включение MultiSubnetFailover по умолчанию
Область применения: .NET Framework; .NET; .NET Standard
(Доступно начиная с версии 7.0)
Чтобы задать MultiSubnetFailover=true глобально без изменения отдельных строк подключения, можно задать параметр AppContext Switch.Microsoft.Data.SqlClient.EnableMultiSubnetFailoverByDefault при true запуске приложения:
AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.EnableMultiSubnetFailoverByDefault", true);
Этот переключатель также можно включить в App.Config:
<runtime>
<AppContextSwitchOverrides value="Switch.Microsoft.Data.SqlClient.EnableMultiSubnetFailoverByDefault=true" />
</runtime>
При включении все подключения ведут себя так, как будто MultiSubnetFailover=true заданы в строке подключения. Этот параметр отключен по умолчанию.
Включение мультиплексирования пакетов для асинхронных операций чтения
Область применения: .NET Framework; .NET; .NET Standard
(Доступно начиная с версии 7.0)
Мультиплексирование пакетов повышает производительность больших операций асинхронного чтения, таких как ExecuteReaderAsync с большими результирующих наборами, сценариями потоковой передачи или получением массовых данных. Эта функция управляется двумя переключателями AppContext, которые должны быть выбраны пользователем. Установка обоих переключателей на false включает новый асинхронный путь обработки:
AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.UseCompatibilityAsyncBehaviour", false);
AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.UseCompatibilityProcessSni", false);
По умолчанию оба параметра установлены в состояние true, сохраняющее существующее (совместимое) поведение.
Включение расширения компонента агента пользователя
Область применения: .NET Framework; .NET; .NET Standard
(Доступно начиная с версии 7.0)
Когда включен параметр AppContext Switch.Microsoft.Data.SqlClient.EnableUserAgent , драйвер отправляет сведения об агенте пользователя серверу в рамках подключения. Эта информация помогает устранять неполадки и квалифицировать использование драйверов по версиям и операционной системе. Этот параметр отключен по умолчанию. Чтобы включить его, задайте для параметра AppContext значение true при запуске приложения:
AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.EnableUserAgent", true);
Включение поведения усечения десятичных чисел
Область применения: .NET Framework; .NET; .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; .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
Прозрачное разрешение IP-адресов сети (TNIR) представляет собой улучшенную версию существующей функции MultiSubnetFailover. TNIR влияет на последовательность подключений драйвера, когда первый разрешенный IP-адрес имени узла не отвечает и имеется несколько IP-адресов, связанных с именем этого узла. TNIR взаимодействует с MultiSubnetFailover и поддерживает следующие три варианта последовательности подключений.
- один IP-адрес проверяется сначала, затем все IP-адреса проверяются параллельно
- 1. Все IP-адреса проверяются параллельно
- Все IP-адреса проверяются один за другим
| Прозрачное разрешение IP-адресов в сети | MultiSubnetFailover | Поведение |
|---|---|---|
| Истина | Истина | 1 |
| Истина | Ложь | 0 |
| Ложь | Истина | 1 |
| Ложь | Ложь | 2 |
По умолчанию прозрачное разрешение сетевых IP-адресов включено. Параметр MultiSubnetFailover отключен по умолчанию. Чтобы отключить TNIR, при запуске приложения можно задать для параметра AppContext Switch.Microsoft.Data.SqlClient.DisableTNIRByDefaultInConnectionString значение true.
AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.DisableTNIRByDefaultInConnectionString", true);
Дополнительные сведения об установке этих свойств см. в документации по свойству SqlConnection.ConnectionString.
Включение минимального времени ожидания при входе
Область применения: .NET Framework; .NET; .NET Standard
Чтобы предотвратить неограниченное время ожидания входа, при запуске приложения можно задать для параметра AppContext Switch.Microsoft.Data.SqlClient.UseOneSecFloorInTimeoutCalculationDuringLogin значение true.
AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.UseOneSecFloorInTimeoutCalculationDuringLogin", false);
Отключить блокирующее поведение ReadAsync
Область применения: .NET Framework; .NET; .NET Standard
Начиная с версии 3.0, ReadAsync выполняется асинхронно. Предыдущие версии выполняют ReadAsync синхронно и блокируют поток вызова в платформе .NET Framework. Чтобы управлять этим поведением блокировки, можно установить переключатель AppContext.Switch.Microsoft.Data.SqlClient.MakeReadAsyncBlocking на значение true или false при запуске приложения.
AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.MakeReadAsyncBlocking", false);
Включение поведения rowversion при значении NULL
Область применения: .NET Framework; .NET; .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; .NET Standard
(Доступно начиная с версии 4.0.1)
При использовании Encrypt=false в строке подключения в консоль выводится предупреждение безопасности, если используется TLS 1.2 или более ранней версии. Это предупреждение можно скрыть, включив следующий параметр AppContext при запуске приложения:
AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.SuppressInsecureTLSWarning", true);
Игнорировать резервный партнер, предоставленный сервером
Область применения: .NET Framework; .NET; .NET Standard
(Доступно начиная с версий 5.1.8, 6.0.4 и 6.1.3)
После переключения при отказе информация о партнере переключения при отказе, предоставляемая сервером, имеет приоритет над информацией о партнере переключения при отказе, указанной в строке подключения. Чтобы при запуске приложения игнорировать сведения о партнере по отработке отказа, предоставляемые сервером, и учитывать только сведения о партнере отработки отказа, предоставленные в строке подключения, включите этот переключатель AppContext:
AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.IgnoreServerProvidedFailoverPartner", true);