2011-01-06 15 views
4

現在、Windows VPS上でSQL Server 2008 Expressデータベースを使用してLINQ to SQLを使用する既存のASP .NET WebフォームとMVCアプリケーションがあります。 IISとSQLの両方のVPS。私は、SQLとIISの両方を効果的にホストするVPSの能力を凌駕し始め、それらを分割する準備をしています。データベースをSQL Azureに移行し、IISをVPSに移行することを検討しています。SQL AzureへのLINQからSQLへのリトライロジックを再構築する最も簡単な方法

最初の調査を行った後、SQL Azureを採用する際にデータアクセス層のリトライロジックを実装する必要があります。 IISがAzureインフラストラクチャ外のVPS上に配置される私の状況では、これはさらに重要な実装であると思われます。

私は、最小限の労力でこれを行う方法に関する指針を探しています。既存のコードベースに影響します。 try/catch/wait/retryロジックでLINQ to SQL操作をすべてラップするのではなく、LINQ to SQLデータアクセスレイヤーに一度適用できる良いリトライパターンはありますか?

+0

SQL AzureのMSDNフォーラムでもこの質問を投稿しました。応答は基本的に「SQL Azureはこのアーキテクチャには適していません。」 –

答えて

1

私はこの問題を複雑にする必要はありません。試し釣りに全部をラップし、しばらくのうちにラップしてください。<再試行回数と完了です。

さまざまな種類のエラーに対して、よりスマートでトラップできるようになりました。違いを扱う場合は、真のデータエラーの場合は再試行する必要はありません。

各例外をトレースしてタイムアウト以外のエラーを追跡するようにしてください。

+0

何を包んでいますか?データベースに新しい接続を作成するコード内のすべてのインスタンス...それは大きな影響です。 –

+0

私は、既存の再試行のショートカットがないと思います。考えてみれば、クエリをラップして返すIQueriable拡張メソッドを作成することができます。 – Doobi

+0

ここでは、接続を開くホットスポットに関するガイダンスを示します。私は彼らのための代替拡張メソッドを作成することを見てみましょう:http://msdn.microsoft.com/en-us/library/bb896325.aspx – Doobi

0

最小限の労力でリトライロジックを管理するために、アスペクト指向プログラミング(AOP)フレームワークを見ることができます。そのようなフレームワークの1つは、AOP原則を緩く実装しているAspectFです。理解して作業するのは簡単です。

0

基本的な原則は、もはや真実ではないかもしれない理由で失敗したトランザクションを再試行することです。したがって、トランザクションがデッドロックまたはデータベース・サーバーへの接続不良のために失敗した場合は、再試行のたびにソート・スリープで数回それを再試行する必要があります。 これはすべてあなたの取引がよく定義されているかどうかによって異なります

ロジックに応じて、「ページ要求レベル」で再試行を実装できます。

  • これは、ページ要求が行う作業をやり直すこと、またはページ要求がデータベーストランザクションの中に完全に進行することに依存します。
  • サーバー上に保持されているメモリ状態についても考えてください。
  • アンHttpHanderは、すべてのページ

のためにこれを行うことができるはずページ処理パイプラインに追加私はあなたの場合は、これを整理して、あなたのコードに任意の「あなたはスピンドルできる魔法」があるとは思いません明確な取引が定義されていない。

トランザクションを使用していない場合は、sqlをすべて作成して何回でも実行でき、必要なときにコマンドオブジェクトのカスタムサブクラスを保持するだけです。

関連する問題