File konfigurasi logika coba lagi yang dapat dikonfigurasi dengan SqlClient
Berlaku untuk: .NET Framework .NET .NET Standard
Metode coba lagi default ketika sakelar keamanan diaktifkan adalah SqlConfigurableRetryFactory.CreateNoneRetryProvider untuk dan SqlConnection SqlCommand. Anda dapat menentukan metode coba lagi yang berbeda dengan menggunakan file konfigurasi.
Bagian konfigurasi
Opsi logika coba lagi default untuk aplikasi dapat diubah dengan menambahkan bagian berikut di dalam bagian configSections
file konfigurasi:
SqlConfigurableRetryLogicConnection
: untuk menentukan logika coba lagi default untuk SqlConnection.
<section name="SqlConfigurableRetryLogicConnection"
type="Microsoft.Data.SqlClient.SqlConfigurableRetryConnectionSection, Microsoft.Data.SqlClient"/>
SqlConfigurableRetryLogicCommand
: untuk menentukan logika coba lagi default untuk SqlCommand.
<section name="SqlConfigurableRetryLogicCommand"
type="Microsoft.Data.SqlClient.SqlConfigurableRetryCommandSection, Microsoft.Data.SqlClient"/>
AppContextSwitchOverrides
: .NET Framework mendukung sakelar AppContext melalui bagian AppContextSwitchOverrides , yang tidak perlu ditentukan secara eksplisit. Untuk mengaktifkan sakelar di .NET Core, Anda harus menentukan bagian ini.
<section name="AppContextSwitchOverrides"
type="Microsoft.Data.SqlClient.AppContextSwitchOverridesSection, Microsoft.Data.SqlClient"/>
Catatan
Konfigurasi berikut harus ditentukan di dalam bagian configuration
. Deklarasikan bagian baru ini untuk mengonfigurasi logika coba lagi default melalui file konfigurasi aplikasi.
Aktifkan 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.
Anda dapat mengaktifkan sakelar keamanan melalui file konfigurasi. Untuk mempelajari cara mengaktifkannya melalui kode aplikasi, lihat Mengaktifkan logika coba lagi yang dapat dikonfigurasi.
- .NET Framework: Untuk informasi selengkapnya, lihat elemen AppContextSwitchOverrides.
<runtime>
<AppContextSwitchOverrides value="Switch.Microsoft.Data.SqlClient.EnableRetryLogic=true"/>
</runtime>
- .NET Core: mendukung beberapa titik koma (;) sakelar yang dibatasi seperti .NET Framework.
<AppContextSwitchOverrides value="Switch.Microsoft.Data.SqlClient.EnableRetryLogic=true"/>
Bagian koneksi
Atribut berikut dapat digunakan untuk menentukan logika coba lagi default untuk semua SqlConnection instans dalam aplikasi:
numberOfTries: mengatur berapa kali untuk dicoba.
deltaTime: mengatur interval waktu kesenjangan TimeSpan sebagai objek.
minTime: mengatur interval waktu kesenjangan minimum yang TimeSpan diizinkan sebagai objek.
maxTime: mengatur interval waktu celah maksimum yang TimeSpan diizinkan sebagai objek.
transientErrors: mengatur daftar nomor kesalahan sementara untuk mencoba kembali.
retryMethod: menentukan pembuat metode coba lagi yang menerima konfigurasi coba lagi melalui SqlRetryLogicOption parameter dan mengembalikan SqlRetryLogicBaseProvider objek.
retryLogicType: mengatur penyedia logika coba lagi kustom, yang berisi pembuat metode coba lagi yang menyediakan
retryMethod
. Metode ini harus memenuhi kriteria untukretryMethod
. Nama jenis penyedia yang sepenuhnya memenuhi syarat harus digunakan. Untuk informasi selengkapnya, lihat Menentukan nama jenis yang sepenuhnya memenuhi syarat.
Catatan
Tidak diharuskan untuk menentukan retryLogicType
apakah Anda menggunakan penyedia coba lagi bawaan. Untuk menemukan penyedia coba lagi bawaan, lihat Penyedia logika coba lagi internal di SqlClient.
Bagian perintah
Atribut berikut juga dapat diatur untuk semua SqlCommand instans dalam aplikasi:
- authorizedSqlCondition: Mengatur ekspresi reguler pra-coba lagi untuk SqlCommand.CommandText memfilter pernyataan SQL tertentu.
Catatan
Ekspresi reguler peka huruf besar/kecil.
Contoh
Upaya untuk membuat koneksi hingga tiga kali dengan penundaan sekitar 1 detik antara percobaan dengan menggunakan SqlConfigurableRetryFactory.CreateFixedRetryProvider metode dan daftar kesalahan sementara default:
<SqlConfigurableRetryLogicConnection retryMethod ="CreateFixedRetryProvider" numberOfTries ="3" deltaTime ="00:00:01"/>
Upaya untuk membuat koneksi hingga lima kali dengan penundaan hingga 45 detik antara percobaan dengan menggunakan SqlConfigurableRetryFactory.CreateExponentialRetryProvider metode dan daftar kesalahan sementara default:
<SqlConfigurableRetryLogicConnection retryMethod ="CreateExponentialRetryProvider" numberOfTries ="5" deltaTime ="00:00:03" maxTime ="00:00:45"/>
Upaya untuk menjalankan perintah hingga empat kali dengan penundaan antara 2 dan 30 detik dengan menggunakan SqlConfigurableRetryFactory.CreateIncrementalRetryProvider metode dan daftar kesalahan sementara default:
<SqlConfigurableRetryLogicCommand retryMethod ="CreateIncrementalRetryProvider" numberOfTries ="4" deltaTime ="00:00:02" maxTime ="00:00:30"/>
Mencoba menjalankan perintah hingga delapan kali dengan penundaan dari satu detik hingga satu menit. Ini terbatas pada perintah dengan
CommandText
berisi kataSELECT
dan nomor pengecualian 102 atau 997. Ini menggunakan metode bawaan SqlConfigurableRetryFactory.CreateIncrementalRetryProvider :<SqlConfigurableRetryLogicCommand retryMethod ="CreateIncrementalRetryProvider" numberOfTries ="8" deltaTime ="00:00:01" maxTime ="00:01:00" transientErrors="102, 997" authorizedSqlCondition="\b(SELECT)\b"/>
Catatan
Dalam dua sampel berikutnya, Anda dapat menemukan kode sumber logika coba lagi kustom dari API inti logika coba lagi yang dapat dikonfigurasi di SqlClient. Diasumsikan CreateCustomProvider
metode didefinisikan di CustomCRL_Doc.CustomRetry
kelas dalam CustomCRL_Doc.dll
rakitan yang ada dalam direktori eksekusi aplikasi.
Upaya untuk membuat koneksi hingga lima kali, dengan penundaan antara 3 dan 45 detik, nomor kesalahan 4060, 997, dan 233 dalam daftar, dan menggunakan penyedia coba lagi kustom yang ditentukan:
<SqlConfigurableRetryLogicConnection retryLogicType ="CustomCRL_Doc.CustomRetry, CustomCRL_Doc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" retryMethod ="CreateCustomProvider" numberOfTries ="5" deltaTime ="00:00:03" maxTime ="00:00:45" transientErrors ="4060, 997, 233"/>
Sampel ini berulah seperti yang sebelumnya:
<SqlConfigurableRetryLogicConnection retryLogicType ="CustomCRL_Doc.CustomRetry, CustomCRL_Doc" retryMethod ="CreateCustomProvider" numberOfTries ="5" deltaTime ="00:00:03" maxTime ="00:00:45" transientErrors ="4060, 997, 233"/>
Catatan
Penyedia logika coba lagi akan di-cache pada penggunaan pertama pada koneksi atau perintah untuk penggunaan di masa mendatang selama masa pakai aplikasi.
Catatan
Kesalahan apa pun saat membaca file konfigurasi aplikasi untuk pengaturan logika coba lagi tidak akan menyebabkan kesalahan dalam aplikasi. Default SqlConfigurableRetryFactory.CreateNoneRetryProvider akan digunakan sebagai gantinya.
Anda dapat menggunakan pelacakan sumber peristiwa untuk memverifikasi atau memecahkan masalah dengan mengonfigurasi logika coba lagi. Untuk informasi selengkapnya, lihat Mengaktifkan pelacakan peristiwa di SqlClient.