SQLセッション状態データベースを切り替える
-
20-12-2019 - |
質問
複数のデータベースに接続されているWebアプリケーションのインスタンスが1つあります。ドメイン名に基づく(たとえば、www.shop1.com、www.shop2.com、。)エンティティフレームワークの接続文字列を切り替えます。
shop1.com -> Database1
shop2.com -> Database2
shop3.com -> Database3
.
これまでのところ良好です。
SQL Serverセッションの状態を使用していますが、データベースの切り替えデータベースのように、セッション状態データベースを切り替えたい。
shop1.com -> SessionStateDatabase1
shop2.com -> SessionStateDatabase2
shop3.com -> SessionStateDatabase3
.
あなたの助けを持っています。
詳細情報を知りたいのなら、なぜこれを行っているのかを知りたい場合:
実際にはマルチテナントを実装しています。上記の説明は3つのサイトを示しています。実際、私は50を超えています。そして、サイトの数は今後数ヶ月で成長するつもりです。現時点では、すべてのサイトが別々に展開されているため、パッチを展開しなければならない場合はいつでも1つのサイトをすべて展開します。サイトを維持するこの方法は悪夢になりつつあります。だから私はそれらの使用法に応じて、1つのインスタンス上に5から10のサイトを置くことを考えていました。
解決
このような場合は、常にフレームワークのソースコードを見てください。まず、設定がセッション状態接続文字列を格納している場所を見つけます。それが使用されている場所を見つけます。プライベートクラスSystem.Web.SessionState.SqlSessionState.SqlSessionStateStore
には、Method OneTimeInit()
があり、そこで接続文字列を読み取ります。ここでpartiniongのサポートがあることに気付きました。Microsoft.com/en-us/library/aa478952.aspx 。私はこれまでにこれまで聞いたことがないが、それはあなたが望むものを正確にしているように見えます、あなたが望むどんな種類の基準に基づいて、複数のデータベースにセッション状態を保存することができます。+1質問のために、これはクールな機能です。また、うまくいかない場合は、あなた自身のSessionStatestoreProviderBase実装を実装することができます。これは公にオーバーライド可能です。
他のヒント
セッション状態接続はコードによって管理されていないため、切り替えることはできません。そのアプリケーションレベルの構成と超過コード制御しかし、これの必要性は発生しません。単一のサーバーは、持っている3つのドメインすべてのセッション状態を管理できます。唯一の懸念は、ユーザーがshop1.comからshop2.comに移動し、まだ古いセッションを保持しているときに唯一の懸念があります。
あなたが3つの別々のウェブアプリケーションと同じ走行を検討しないであろう理由はありますか?
- 1つのエラーは3つのサイトすべてを停止しない
- セッション状態はアプリケーション で区切られています
- は、成長を指示された とは異なるシステムにスケール能力を許可することができます。