SqlClient の構成可能な再試行ロジックの概要

適用対象: .NET Framework .NET .NET Standard

ADO.NET のダウンロード

構成可能な再試行ロジックにより、開発者および管理者は、一時的な障害が発生したときにアプリケーションの動作を管理できます。 この機能は、接続時またはコマンドの実行時の制御を高めます。 制御は、コードまたはアプリケーション構成ファイルを使用して定義することができます。 一時的なエラーの番号と再試行プロパティを定義して、再試行の動作を制御できます。 また、正規表現を使用して、特定の SQL ステートメントをフィルター処理することもできます。

機能コンポーネント

この機能は、次の 3 つの主要コンポーネントで構成されます。

  1. コア API: 開発者は、これらのインターフェイスを使用して、SqlConnection および SqlCommand オブジェクトに独自の再試行ロジックを実装できます。 詳細については、「SqlClient の構成可能な再試行ロジックのコア API」を参照してください。
  2. 事前定義済みの構成可能な再試行ロジック: コア API を使用する組み込みの再試行ロジック メソッドは、SqlConfigurableRetryFactory クラスからアクセスできます。 詳細については、「SqlClient の内部再試行ロジック プロバイダー」を参照してください。
  3. 構成ファイル スキーマ: アプリケーション内の SqlConnection および SqlCommand の既定の再試行ロジックを指定します。 詳細については、「SqlClient での構成可能な再試行ロジック構成ファイル」を参照してください。

クイック スタート

この機能を使用するには、次の 4 つの手順に従います。

  1. プレビュー バージョンで安全スイッチを有効にします。 AppContext 安全スイッチを有効にする方法については、「構成可能な再試行ロジックを有効にする」を参照してください。

  2. SqlRetryLogicOption を使用して、再試行ロジック オプションを定義します。
    次のサンプルでは、一部の再試行パラメーターが設定されており、残りのパラメーターでは既定値が使用されます。

    // Define the retry logic parameters
    var options = new SqlRetryLogicOption()
    {
        // Tries 5 times before throwing an exception
        NumberOfTries = 5,
        // Preferred gap time to delay before retry
        DeltaTime = TimeSpan.FromSeconds(1),
        // Maximum gap time for each delay time before retry
        MaxTimeInterval = TimeSpan.FromSeconds(20)
    };
    
  3. SqlRetryLogicOption オブジェクトを使用して、再試行ロジック プロバイダーを作成します。

    // Create a retry logic provider
    SqlRetryLogicBaseProvider provider = SqlConfigurableRetryFactory.CreateExponentialRetryProvider(options);
    
  4. SqlRetryLogicBaseProvider インスタンスを SqlConnection.RetryLogicProvider または SqlCommand.RetryLogicProvider に割り当てます。
    次のサンプルでは、SqlConfigurableRetryFactory 内部リストの一時的なエラーの 1 つに最大 5 回ヒットした場合、connection open コマンドが再試行されます。

    // Assumes that connection is a valid SqlConnection object 
    // Set the retry logic provider on the connection instance
    connection.RetryLogicProvider = provider;
    // Establishing the connection will retry if a transient failure occurs.
    connection.Open();
    

Note

これらの手順は、コマンドを実行する前に SqlCommand.RetryLogicProvider プロパティに再試行プロバイダーを割り当てることを除いて、コマンドを実行する場合と同じです。

関連項目