Bagikan melalui


Sakelar AppContext di Sqlclient

Mengunduh ADO.NET

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:Tidak didukung. .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 Tidak didukung. .NET Core Tidak didukung. .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);

Lihat juga

Kelas AppContext