2011-03-11 8 views
2

私は現在、単一のaspnetdbインスタンスでユーザーを管理するユーザー管理アプリケーションを作成しています。この1つのインスタンスには複数の「アプリケーション」が含まれ、すべてが個々のアプリケーションに対して割り当てられた役割を持っています。Roles.ApplicationNameスレッドセーフを作成するにはどうすればよいですか?

各ユーザーは複数のアプリケーションのメンバーになる可能性があるため、Roles.ApplicationNameを使用して、構成された各アプリケーションを順番に実行し、それらがメンバーになっている役割を判断します。各アプリケーションをチェックした後、私はRoles.ApplicationNameを管理アプリケーションである元のアプリケーションに戻しました。

私が抱えている問題は、複数のユーザーがそれぞれ個々のアプリケーションを見て、Roles.GetAllRoles()のリクエストが行われたときです。ほとんどの場合、戻ってくる役割は意図したアプリケーションの役割ですが、アプリケーションごとにRoles.ApplicationNameを循環する他の要求によって間違ったアプリケーションの役割が戻ってくることがあります。

Roles.ApplicationNameはスレッドセーフではないため、Webアプリケーションで使用しないでくださいが、アプリケーションのロールモデルを書き換える必要はありません。

また、aspnetdbアプリケーションはこの管理システムによって作成されるため、アプリケーションごとに1つずつ複数のRoleProviderを作成することはできません。

答えて

0

これを行うためのラッパーを作成しないでください。私の頭の上から自分のロールプロバイダを実装し、適切な同期を配置することができます。

+0

これは、SqlRoleProviderをラップして、メソッドに対してロックを作成することで正確に行いました。これはまだ問題につながっているようです。しかし、私は基本的なRoleProviderオブジェクトをラップし、適切なaspnetdb spsへの呼び出しを手動ですべてうまくいきました。 –

関連する問題