6

最近、Entity Framework には、SQL Azure で接続を復元するための非常に簡単な方法があることがわかりました。Dapperで同じことを達成するための推奨される方法はありますか?

4

1 に答える 1

13

Azure に対して C# での接続の問題から保護する最速の方法は、 Microsoft Transient Fault Handling Blockです。

たとえば、次のコードは、Windows Azure SQL データベースへの接続を開こうとするときに、1 秒間隔で最大 3 回再試行します。

var retryStrategy = new FixedInterval(3, TimeSpan.FromSeconds(1));

var retryPolicy = 
  new RetryPolicy<SqlDatabaseTransientErrorDetectionStrategy>(retryStrategy);

retryPolicy.ExecuteAction(() => myConnection.Open());

FixedIntervalはバックオフ ポリシーであるため、3 回試行されるまで試行、1 秒待機、再試行などを繰り返します。

SqlDatabaseTransientErrorDetectionStrategyスローされた例外をチェックするだけで、再試行する必要がある接続例外である場合はRetryPolicy、アクションを再度実行するように指示します。接続例外でない場合、アクションは実行されず、元の例外が通常どおりスローされます。

Dapperでいつ使用する必要があるかについて。接続を開いて読み取り操作を安全に再試行できますが、挿入を複製したり、行を 2 回削除しようとしたりするリスクがあるため、書き込み操作に注意してください。

詳細はこちら。このライブラリは、Windows Azure の検出戦略を含むNuGet パッケージとしてここにあります。

于 2015-01-03T12:05:21.020 に答える