1

out-of-process次のようなプロバイダーを使用するようにWebアプリを構成することにより、セッション状態を保存することについて読みましたが、メモリ内に残っていますStateServer

Web ファーム内のすべてのサーバー間で共有したい内容をList<int>含むがあります。accountIDsこのリストは、特定のアカウントに関連するセッション データではありません。これは、ファーム内の各サーバーがリクエストごとにチェックして、が含まれていaccountIDます。

このデータは、セッション状態が共有されるのと同じ方法で共有できますか? これをどのように行うべきか詳細を教えてください。

これは良い解決策ですか?多くのサーバーが同じリストにアクセスしようとすると、パフォーマンスが低下しますか?

編集:余分に...

私のアプリのユーザー アカウントには_accountStatusがあり、一時停止に設定されている場合、ユーザーができることを制限するためにアプリで使用されます。_accountStatusは、特注の認証チケットに保持されます。問題は、ユーザーがサインインしたままになり、今日サインインし、離れてから 1 か月後に戻ってきても、まだサインインしている可能性があることです。一方、サイト管理者はアカウントを一時停止している可能性がありますが、_accountStatusは認証チケットに保持されているためです。現在は正しくなく、ユーザーはまだアクセスしてはならないアクセス権を持っています。

そのため、ユーザーの_accountStatusが管理者によって変更されると、_accountIDが に追加されthe listます。次に、リクエストごとにリストがチェックされます。アカウントがリストにある場合、そのアカウントの_accountStatusをデータベース (常に正しい値を持つ) からリロードし、認証チケットを更新する必要があります。

したがって、おそらく SQL Server でリストを永続化することが最善の解決策です。

別の解決策として、_accountStatusを認証チケットではなくセッションに保存することもできます。新しいセッションが開始されると、ロードされる可能性があります。しかし、管理者がユーザーのセッション中にアカウントを一時停止することを決定した場合はどうなるかという問題があります。アプリケーションはどのようにしてそのユーザーのセッションにアクセスし、外部から_accountStatusHttpApplicationを更新できますか? または、ユーザーのリクエストの合間に、私の言いたいことがわかりますか?

4

1 に答える 1

2

これには何も組み込まれていません。

このようなリストへの同時書き込みアクセスには、データの一貫性のためにロックが必要です。書き込みは一般的ですか?それがパフォーマンスを破壊するからではないことを願っています。

そのリストを SQL Server に保持することをお勧めします。おそらく、ファイル共有上のテキスト ファイルでも十分でしょう。

于 2012-03-31T20:50:48.760 に答える