Bagikan melalui


File konfigurasi logika coba lagi yang dapat dikonfigurasi dengan SqlClient

Berlaku untuk: .NET Framework .NET .NET Standard

Mengunduh ADO.NET

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 untuk retryMethod. 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 kata SELECT 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.

Lihat juga