2016-04-27 10 views
0

私はasp.netのWebサイトを持っています。これは、本番データベースのスナップショットであるため、5分ごとに回復するデータベースに接続されています。サイトにログインすると、データベースが回復中で、データベース関連のエラーが返されます。毎回同じエラーが返されることはありません。データベースリカバリ後に自動的に接続する

私が望むのは、dbが回復してユーザーがログインするたびに、バックエンドでカスタムエラーページが返されます。リカバリによって接続が失われた場合、自動的に一度接続されますデータベースは復旧時に実行されます。何か案が ?ありがとう。

+0

あなたが何をしようとしたのですか? –

+0

私は正直なところまだ何も試していない。私は接続を維持できるように 'whileループ'を使うことを考えていました。しかし、私はそれがグローバルに私のasp.netのmvcプロジェクトで実装されるようにそれを置くためにどのような考えを持っていない。 (私はエンティティフレームワークを使用しています) – Qwerty

答えて

0

を強固な再試行戦略を提供します。接続回復力とは、これらの接続が切断されたために失敗したコマンドをEFが自動的に再試行する機能を指します。

接続の再試行は、IDbExecutionStrategyインターフェイスの実装によって行われます。 IDbExecutionStrategyの実装は、操作を受け付け、例外が発生した場合には再試行が適切かどうかを判断し、再試行があれば再試行を行います。ここで

いくつかの有用なサンプル:

Implementing Connection Resiliency with Entity Framework 6

Connection Resiliency in Entity Framework 6.0 above

+0

EFにこれがあることを知らなかった。提案していただきありがとうございます! :) – Qwerty

0

私は、フレークな動作を避けるために、データベース側でより良いデザインを見つけることをお勧めします。それがあなたのコントロールであれば、ポリリーライブラリーを試して再試行を管理してください。 Nugetで利用可能で、GITのPolly Pageにあります。これはあなたがEF Connection Resiliency機能を使用することができるなどのループで1自分をでっち上げるしようとしなくても、あなたに

// Retries for 30 seconds, 5 times. 
Policy.Handle<Exception>() // Replace <Exception> with the DB exception you receive 
.WaitAndRetry(5, retryAttempt => TimeSpan.FromSeconds(30)) 
.ExecuteAndCapture(() => 
{ 
<Your code goes here> 
}); 
関連する問題