SqlClient での構成可能な再試行ロジック構成ファイル
適用対象: .NET Framework .NET .NET Standard
安全スイッチが有効な場合の既定の再試行メソッドは、SqlConnection および SqlCommand のどちらの場合も 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"/>
AppContextSwitchOverrides
: .NET Framework では、AppContextSwitchOverrides セクションを介して AppContext スイッチがサポートされます。これは、明示的に定義する必要はありません。 .NET Core でスイッチをオンにするには、このセクションを指定する必要があります。
<section name="AppContextSwitchOverrides"
type="Microsoft.Data.SqlClient.AppContextSwitchOverridesSection, Microsoft.Data.SqlClient"/>
Note
configuration
セクション内で、次の構成を指定する必要があります。 アプリケーション構成ファイルを使用して既定の再試行ロジックを構成するには、これらの新しいセクションを宣言します。
安全スイッチを有効にする
Note
Microsoft.Data.SqlClient v4.0 以降、構成可能な再試行ロジック機能を使用するのに、アプリ コンテキスト スイッチ "Switch.Microsoft.Data.SqlClient.EnableRetryLogic" は不要になりました。 この機能は、実稼働環境でサポートされるようになりました。 この機能の既定の動作は、引き続き非再試行ポリシーになります。これは、再試行を有効にするには、クライアント アプリケーションでオーバーライドされる必要があります。
安全スイッチは、構成ファイルを使用して有効にすることができます。 アプリケーション コードを使用して有効にする方法については、「構成可能な再試行ロジックを有効にする」を参照してください。
- .NET Framework: 詳細については、「AppContextSwitchOverrides 要素」を参照してください。
<runtime>
<AppContextSwitchOverrides value="Switch.Microsoft.Data.SqlClient.EnableRetryLogic=true"/>
</runtime>
- .NET Core: .NET Framework と同様に、複数のセミコロン (;) で区切られたスイッチをサポートします。
<AppContextSwitchOverrides value="Switch.Microsoft.Data.SqlClient.EnableRetryLogic=true"/>
接続セクション
次の属性を使用して、アプリケーション内のすべての SqlConnection インスタンスの既定の再試行ロジックを指定できます。
numberOfTries: 試行回数を設定します。
deltaTime: ギャップ時間間隔を TimeSpan オブジェクトとして設定します。
minTime: 許容される最小ギャップ時間間隔を TimeSpan オブジェクトとして設定します。
maxTime: 許容される最大ギャップ時間間隔を TimeSpan オブジェクトとして設定します。
transientErrors: 再試行する一時的なエラー番号のリストを設定します。
retryMethod: SqlRetryLogicOption パラメーターを介して再試行の構成を受け取り、SqlRetryLogicBaseProvider オブジェクトを返す再試行メソッドの作成者を指定します。
retryLogicType:
retryMethod
を提供する再試行メソッドの作成者を含むカスタム再試行ロジック プロバイダーを設定します。 これらのメソッドは、retryMethod
の条件を満たす必要があります。 プロバイダーの完全修飾型名を使用する必要があります。 詳細については、「完全修飾型名の指定」を参照してください。
Note
組み込みの再試行プロバイダーを使用する場合は、retryLogicType
を指定する必要はありません。 組み込みの再試行プロバイダーを見つけるには、「SqlClient の内部再試行ロジック プロバイダー」を参照してください。
コマンド セクション
アプリケーション内のすべての SqlCommand インスタンスに対して、次の属性を設定することもできます。
- authorizedSqlCondition: SqlCommand.CommandText の再試行前の正規表現を設定して、特定の SQL ステートメントをフィルター処理します。
Note
正規表現では、大文字と小文字が区別されます。
例
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
のコマンドに限定されます。 これは、組み込みの SqlConfigurableRetryFactory.CreateIncrementalRetryProvider メソッドを使用します。<SqlConfigurableRetryLogicCommand retryMethod ="CreateIncrementalRetryProvider" numberOfTries ="8" deltaTime ="00:00:01" maxTime ="00:01:00" transientErrors="102, 997" authorizedSqlCondition="\b(SELECT)\b"/>
Note
次の 2 つの例では、「SqlClient の構成可能な再試行ロジックのコア API」のカスタム再試行ロジックのソース コードを見つけることができます。 CreateCustomProvider
メソッドは、アプリケーションの実行ディレクトリ内にある CustomCRL_Doc.dll
アセンブリの CustomCRL_Doc.CustomRetry
クラスで定義されていることを前提としています。
指定されたカスタム再試行プロバイダーを使用して、遅延時間を 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"/>
Note
アプリケーションの有効期間中に将来使用できるように、再試行ロジック プロバイダーは、接続またはコマンドでの最初の使用時にキャッシュされます。
Note
再試行ロジックの設定のためにアプリケーション構成ファイルを読み取るときにエラーが発生しても、アプリケーションでエラーが発生することはありません。 代わりに、既定の SqlConfigurableRetryFactory.CreateNoneRetryProvider が使用されます。
イベント ソース トレースを使用して、再試行ロジックの構成に関する問題を検証またはトラブルシューティングできます。 詳細については、「SqlClient でのイベントのトレースの有効化」を参照してください。