設定ファイルでSqlClientの再試行ロジックを設定する

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

ADO.NET のダウンロード

アプリケーション設定ファイルを使って、プロセス中のすべての SqlConnection または SqlCommand インスタンスにデフォルトのリトライプロバイダーを割り当てます。 これらのセクションやオブジェクトレベルのプロバイダー割り当てがなければ、SqlClientは SqlConfigurableRetryFactory.CreateNoneRetryProvider を使用しリトライしません。

設定セクション

configSections要素内でリトライセクションを宣言します。 セクション宣言は対応する設定値の前に表示されなければなりません。

  • SqlConfigurableRetryLogicConnection: SqlConnectionのデフォルトプロバイダーを設定します。
<section name="SqlConfigurableRetryLogicConnection"
        type="Microsoft.Data.SqlClient.SqlConfigurableRetryConnectionSection, Microsoft.Data.SqlClient"/>
  • SqlConfigurableRetryLogicCommand: SqlCommandのデフォルトプロバイダーを設定します。
<section name="SqlConfigurableRetryLogicCommand"
        type="Microsoft.Data.SqlClient.SqlConfigurableRetryCommandSection, Microsoft.Data.SqlClient"/>

接続セクション

アプリケーション内のすべての SqlConnection インスタンスのデフォルトのリトライロジックを設定するには、以下の属性を使用します。

  • numberOfTries:初回の操作を含む総試行回数を設定します。 有効範囲は1から60までです。

  • deltaTime:ギャップ時間間隔を TimeSpan オブジェクトとして設定します。

  • minTime: TimeSpan オブジェクトとして許容される最小ギャップ時間間隔を設定します。

  • maxTime: TimeSpan オブジェクトとして許容される最大ギャップ時間間隔を設定します。

  • transientErrors:再試行する誤り番号のカンマ区切られたリストを設定します。 もし省略すると、プロバイダーは 内蔵の一時的エラーリストを使用します。 もし指定すれば、あなたのリストが組み込みのリストに代わってきます。

  • retryMethod: SqlRetryLogicOption パラメータを通じてリトライ構成を受け取り、 SqlRetryLogicBaseProvider オブジェクトを返すリトライメソッド作成者を指定します。

  • retryLogicType: retryMethodで識別されたリトライメソッドの作成者を含むカスタムリトライロジックプロバイダーを設定します。 これらの方法は retryMethodの基準を満たしていなければなりません。 提供者の完全限定型名を使用してください。 詳細については、「完全修飾型名の指定」を参照してください。

組み込みプロバイダーを使う際に retryLogicType を指定する必要はありません。 利用可能なメソッドについては、 SqlClientの組み込みリトライロジックプロバイダーを参照してください。

コマンド セクション

アプリケーション内のすべての SqlCommand インスタンスのデフォルトリトライロジックを、connection-section属性と以下のコマンド固有の属性を使って設定します。

  • authorizedSqlCondition: プロバイダーがコマンドを再試行する前に、 SqlCommand.CommandText が一致しなければならない正規表現を設定します。 式が一致しない場合、コマンドはリトライロジックなしで一度だけ実行されます。

この正規表現は、大文字と小文字を区別します。 大文字に非依存なマッチングが必要な場合は、 (?i) のようなインラインオプションを含めましょう。

  • SqlConfigurableRetryFactory.CreateFixedRetryProvider メソッドと既定の一時的なエラー リストを使用して、試行間の遅延時間を約 1 秒に設定し、接続の確立を最大 3 回試みます。

    <SqlConfigurableRetryLogicConnection retryMethod ="CreateFixedRetryProvider"
                                            numberOfTries ="3" deltaTime ="00:00:01"/>
    
  • SqlConfigurableRetryFactory.CreateExponentialRetryProvider メソッドと既定の一時的なエラー リストを使用して、試行間の遅延時間を最長 45 秒に設定し、接続の確立を最大 5 回試みます。

    <SqlConfigurableRetryLogicConnection retryMethod ="CreateExponentialRetryProvider"
                        numberOfTries ="5" deltaTime ="00:00:03" maxTime ="00:00:45"/>
    
  • SqlConfigurableRetryFactory.CreateIncrementalRetryProvider メソッドと既定の一時的なエラー リストを使用して、試行間の遅延時間を 2 秒から 30 秒までに設定し、コマンドの実行を最大 4 回試みます。

    <SqlConfigurableRetryLogicCommand retryMethod ="CreateIncrementalRetryProvider"
                        numberOfTries ="4" deltaTime ="00:00:02" maxTime ="00:00:30"/>
    
  • 遅延時間を 1 秒から 1 分までに設定し、コマンドの実行を最大 8 回試みます。 これは大文字の単語SELECTとエラー番号102または997を含むCommandTextコマンドに限定されます。 transientErrorsを指定することで組み込みリストが置き換えられるため、他のエラーは再試されません。 SqlConfigurableRetryFactory.CreateIncrementalRetryProvider の使用例を次に示します。

    <SqlConfigurableRetryLogicCommand retryMethod ="CreateIncrementalRetryProvider"
                            numberOfTries ="8" deltaTime ="00:00:01" maxTime ="00:01:00"
                            transientErrors="102, 997"
                            authorizedSqlCondition="\b(SELECT)\b"/>
    

次の 2 つの例では、「SqlClient の構成可能な再試行ロジックのコア API」のカスタム再試行ロジックのソース コードを見つけることができます。 CreateCustomProvider メソッドは、アプリケーションの実行ディレクトリ内にある CustomCRL_Doc.CustomRetry アセンブリの CustomCRL_Doc.dll クラスで定義されていることを前提としています。

  • 指定されたカスタム再試行プロバイダーを使用して、遅延時間を 3 秒から 45 秒までに設定し、リスト内のエラー番号 4060、997、および 233 で、接続の確立を最大 5 回試みます。

    <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"/>
    
  • このサンプルは、前のサンプルと同様に動作します。

    <SqlConfigurableRetryLogicConnection retryLogicType ="CustomCRL_Doc.CustomRetry, CustomCRL_Doc"
                        retryMethod ="CreateCustomProvider"
                        numberOfTries ="5" deltaTime ="00:00:03" maxTime ="00:00:45"
                        transientErrors ="4060, 997, 233"/>
    

Important

設定されたデフォルトのいずれかの最初の要求は、SqlClientが接続プロバイダーとコマンドプロバイダーの両方を読み込みキャッシュします。 設定ファイルの変更は、プロセスが再起動されるまでどちらのプロバイダーにも影響しません。

再試行設定の読み取りエラーはアプリケーションが失敗するわけではありません。 SqlClientは設定エラーを追跡し SqlConfigurableRetryFactory.CreateNoneRetryProviderを使わせるため、再試行なしで操作が実行されます。

イベントソーストレーシングを使って再試行の設定を検証またはトラブルシューティングしてください。 詳細については、「SqlClient でのイベントのトレースの有効化」を参照してください。