0

Azure でホストされているMVC3 と WCF RESTサービスがあり、SQL Azure と Entity Framework 4.1 を ORM として使用しています。

このセットアップのスケーラビリティを高めるために、シャーディング スキームを導入したいと考えています。

Azure はステートレス ホスティング環境であるため、私のシステムでは、すべての要求にユーザー ID が入力されます。このユーザー ID を使用してハッシュを生成し、目的のデータベースを指す接続文字列を作成します (ユーザーによるシャーディング)。

現在、WCF および MVC 拡張機能を備えた Ninject を使用して、EF DbContext をリポジトリに挿入しています。コンテキストのライフサイクルはリクエスト スコープ内にあります (私の残りのサービスは aspnetcompatibility を使用します)。

私の質問は次のとおりです。このインジェクションを傍受し、DbContext に正しい接続文字列を設定するにはどうすればよいですか? たとえば、WCF でカスタム ServiceHostFactory を使用しますか?

Ninject.Interception 拡張機能を確認しましたが、サービスとコントローラーをアクティブ化する前に HTTP 要求をインターセプトするように設定する方法がわかりませんでした。

これにより、既存のコードをリファクタリングせずにシャーディングを使用できるようになります。

4

1 に答える 1

1

私は問題を非常に考えすぎていたことがわかりました。

Bind<MyEntities>().ToMethod(ctx => GetShardedContext());

GetShardedContext() は、HttpContext.Current または WebOperationContext.Current から適切なコンストラクター引数を使用してインスタンスを作成します。

于 2011-08-23T13:31:07.917 に答える