Sakelar AppContext di Sqlclient
Kelas AppContext memungkinkan SqlClient untuk menyediakan fungsionalitas baru sambil terus mendukung pemanggil yang bergantung pada perilaku sebelumnya. Pengguna dapat menolak perubahan perilaku dengan mengatur sakelar AppContext tertentu.
Memaksa penggunaan protokol enkripsi sistem operasi
Berlaku untuk: .NET Framework .NET .NET Standard
Dimulai dengan Microsoft.Data.SqlClient 4.0, TLS 1.3 tidak didukung oleh driver dan dihapus dari daftar protokol yang didukung secara default. Pengguna dapat beralih kembali untuk memaksa penggunaan protokol klien sistem operasi, dengan mengatur sakelar AppContext "Switch.Microsoft.Data.SqlClient.UseSystemDefaultSecureProtocols" ke true:
AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.UseSystemDefaultSecureProtocols", true);
Dimulai dengan versi 5.0, TLS 1.3 didukung dalam koneksi TDS 8 tanpa harus menggunakan sakelar di atas. TDS 8 diaktifkan saat Encrypt
diatur ke Strict
.
Mengaktifkan perilaku pemotongan desimal
Berlaku untuk: .NET Framework .NET .NET Standard
Dimulai dengan Microsoft.Data.SqlClient 2.0, data desimal dibulatkan secara default, seperti yang dilakukan oleh SQL Server. Untuk mengaktifkan perilaku pemotongan sebelumnya, Anda dapat mengatur sakelar AppContext "Switch.Microsoft.Data.SqlClient.TruncateScaledDecimal" ke true
saat pengaktifan aplikasi:
AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.TruncateScaledDecimal", true);
Mengaktifkan jaringan terkelola pada Windows
Berlaku untuk: .NET Framework .NET Core .NET Standard
(Tersedia dimulai dengan versi 2.0)
Di Windows, SqlClient menggunakan implementasi asli antarmuka jaringan SNI secara default. Untuk mengaktifkan penggunaan implementasi SNI terkelola, Anda dapat mengatur sakelar AppContext "Switch.Microsoft.Data.SqlClient.UseManagedNetworkingOnWindows" ke true
saat pengaktifan aplikasi:
AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.UseManagedNetworkingOnWindows", true);
Sakelar ini mengalihkan perilaku driver untuk menggunakan implementasi jaringan terkelola di proyek .NET Core 2.1+ dan .NET Standard 2.0+ di Windows, menghilangkan semua dependensi pada pustaka asli untuk pustaka Microsoft.Data.SqlClient. Ini hanya untuk tujuan pengujian dan penelusuran kesalahan.
Catatan
Ada beberapa perbedaan yang diketahui jika dibandingkan dengan implementasi asli. Misalnya, implementasi terkelola tidak mendukung Autentikasi Windows non-domain.
Menonaktifkan Resolusi IP Jaringan Transparan
Berlaku untuk: .NET Framework .NET Core .NET Standard
Resolusi IP Jaringan Transparan (TNIR) adalah revisi dari fitur MultiSubnetFailover yang ada. TNIR memengaruhi urutan koneksi driver dalam kasus di mana IP pertama yang diselesaikan dari nama host tidak merespons dan ada beberapa IP yang terkait dengan nama host. TNIR berinteraksi dengan MultiSubnetFailover untuk menyediakan tiga urutan koneksi berikut:
- 0: Satu IP dicoba, diikuti oleh semua IP secara paralel
- 1: Semua IP dicoba secara paralel
- 2: Semua IP dicoba satu demi satu
TransparentNetworkIPResolution | MultiSubnetFailover | Perilaku |
---|---|---|
Benar | Benar | 1 |
Benar | Salah | 0 |
Salah | Benar | 1 |
Salah | False | 2 |
TransparentNetworkIPResolution diaktifkan secara default. MultiSubnetFailover dinonaktifkan secara default. Untuk menonaktifkan TNIR, Anda dapat mengatur sakelar AppContext "Switch.Microsoft.Data.SqlClient.DisableTNIRByDefaultInConnectionString" ke true
saat pengaktifan aplikasi:
AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.DisableTNIRByDefaultInConnectionString", true);
Untuk informasi selengkapnya tentang mengatur properti ini, lihat dokumentasi untuk Properti SqlConnection.ConnectionString.
Aktifkan batas waktu minimum selama masuk
Berlaku untuk: .NET Framework .NET .NET Standard
Untuk mencegah upaya masuk menunggu tanpa batas waktu, Anda dapat mengatur sakelar AppContext Switch.Microsoft.Data.SqlClient.UseOneSecFloorInTimeoutCalculationDuringLogin ke true
saat pengaktifan aplikasi:
AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.UseOneSecFloorInTimeoutCalculationDuringLogin", false);
Menonaktifkan perilaku pemblokiran ReadAsync
Berlaku untuk: .NET Framework .NET .NET Standard
Mulai versi 3.0, ReadAsync berjalan secara asinkron. Versi sebelumnya menjalankan ReadAsync secara sinkron dan memblokir utas panggilan pada .NET Framework. Untuk mengontrol perilaku pemblokiran ini, Anda dapat mengatur sakelar AppContext Switch.Microsoft.Data.SqlClient.MakeReadAsyncBlocking ke true
atau false
pada pengaktifan aplikasi:
AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.MakeReadAsyncBlocking", false);
Aktifkan logika coba lagi yang dapat dikonfigurasi
Berlaku untuk: .NET Framework .NET .NET Standard
(Tersedia dimulai dengan versi 3.0)
Secara default, logika coba lagi yang dapat dikonfigurasi dinonaktifkan. Untuk mengaktifkan fitur ini, atur sakelar AppContext Switch.Microsoft.Data.SqlClient.EnableRetryLogic ke true
saat pengaktifan aplikasi. Sakelar ini diperlukan, bahkan jika penyedia coba lagi ditetapkan ke koneksi atau perintah.
AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.EnableRetryLogic", true);
- Untuk informasi tentang cara mengaktifkan sakelar dengan menggunakan file konfigurasi lihat Mengaktifkan sakelar keamanan.
Catatan
Mulai dari Microsoft.Data.SqlClient v4.0, sakelar Konteks Aplikasi "Switch.Microsoft.Data.SqlClient.EnableRetryLogic" tidak akan lagi diperlukan untuk menggunakan fitur logika coba lagi yang dapat dikonfigurasi. Fitur ini sekarang didukung dalam produksi. Perilaku default fitur akan terus menjadi kebijakan non-coba lagi, yang perlu ditimpa oleh aplikasi klien untuk mengaktifkan percobaan ulang.
Mengaktifkan perilaku null rowversion
Berlaku untuk: .NET Framework .NET .NET Standard
Mulai versi 3.0, ketika rowversion memiliki nilai null, SqlDataReader
mengembalikan DBNull
nilai alih-alih kosong byte[]
. Untuk mengaktifkan perilaku warisan mengembalikan kosong byte[]
, aktifkan sakelar AppContext Switch.Microsoft.Data.SqlClient.LegacyRowVersionNullBehavior pada startup aplikasi.
AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.LegacyRowVersionNullBehavior", true);
Menekan peringatan TLS yang tidak aman
Berlaku untuk: .NET Framework .NET .NET Standard
(Tersedia dimulai dengan versi 4.0.1)
Saat menggunakan Encrypt=false
di string koneksi, peringatan keamanan adalah output ke konsol jika versi TLS adalah 1.2 atau lebih rendah. Peringatan ini dapat disembunyikan dengan mengaktifkan pengalihan AppContext berikut pada startup aplikasi:
AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.SuppressInsecureTLSWarning", true);