SqlClient の AppContext スイッチ
AppContext クラスを使用すれば、SqlClient によって、以前の動作に依存する呼び出し元を引き続きサポートしながら、新しい機能を提供することができます。 ユーザーは、特定の AppContext スイッチを設定することによって、動作の変更をオプトアウトすることができます。
オペレーティング システム暗号化プロトコルを強制する
適用対象: .NET Framework .NET .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 以降、TDS 8 の接続では前述のスイッチを使わなくても TLS 1.3 がサポートされるようになりました。 Encrypt
を Strict
に設定すると、TDS 8 が有効になります。
小数点の切り捨て動作の有効化
適用対象: .NET Framework .NET .NET Standard
Microsoft.Data.SqlClient 2.0 以降、SQL Server と同様に、10 進データはデフォルトで四捨五入されます。 以前の切り捨て動作を有効にするには、アプリケーションの起動時に、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);
このスイッチは、Windows 上の .NET Core 2.1 以降および .NET Standard 2.0 以降のプロジェクトでマネージド ネットワーク実装を使用するようにドライバーの動作を切り替え、Microsoft.Data.SqlClient ライブラリのネイティブ ライブラリへの依存関係をすべて排除します。 これはテストとデバッグのみを目的としています。
Note
ネイティブ実装と比較すると、いくつかの既知の相違点があります。 たとえば、マネージド実装では、非ドメイン Windows 認証はサポートされていません。
透過的なネットワーク IP の解決の無効化
適用対象: .NET Framework .NET Core .NET Standard
透過的なネットワーク IP の解決 (TNIR) は、既存の MultiSubnetFailover 機能の改訂です。 TNIR は、ホスト名の解決された最初の IP が応答せず、ホスト名に複数の IP が関連付けられている場合に、ドライバーの接続シーケンスに影響を及ぼします。 TNIR は、MultiSubnetFailover と連動して、次の 3 つの接続シーケンスを提供します。
- 0:1 つの IP が試行され、その後にすべての IP が並列で試行されます
- 1:すべての IP が並列で試行されます
- 2:すべての IP が 1 つずつ試行されます
TransparentNetworkIPResolution | MultiSubnetFailover | 動作 |
---|---|---|
True | True | 1 |
正しい | False | 0 |
False | True | 1 |
False | False | 2 |
TransparentNetworkIPResolution は既定では有効になっています。 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);
構成可能な再試行ロジックを有効にする
適用対象: .NET Framework .NET .NET Standard
(バージョン 3.0 以降で使用できます)
既定では、構成可能な再試行ロジックは無効になっています。 この機能を有効にするには、アプリケーションの起動時に AppContext スイッチ Switch.Microsoft.Data.SqlClient.EnableRetryLogic を true
に設定します。 このスイッチは、接続またはコマンドに再試行プロバイダーが割り当てられている場合でも必要です。
AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.EnableRetryLogic", true);
- 構成ファイルを使用してこのスイッチを有効にする方法の詳細については、「安全スイッチを有効にする」を参照してください。
Note
Microsoft.Data.SqlClient v4.0 以降、構成可能な再試行ロジック機能を使用するのに、アプリ コンテキスト スイッチ "Switch.Microsoft.Data.SqlClient.EnableRetryLogic" は不要になりました。 この機能は、実稼働環境でサポートされるようになりました。 この機能の既定の動作は、引き続き非再試行ポリシーになります。これは、再試行を有効にするには、クライアント アプリケーションでオーバーライドされる必要があります。
rowversion の null 動作の有効化
適用対象: .NET Framework .NET .NET Standard
バージョン 3.0 以降、rowversion の値が null の場合、SqlDataReader
は空の byte[]
ではなく値 DBNull
を返します。 空の 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);