私は現在、単一のaspnetdbインスタンスでユーザーを管理するユーザー管理アプリケーションを作成しています。この1つのインスタンスには複数の「アプリケーション」が含まれ、すべてが個々のアプリケーションに対して割り当てられた役割を持っています。Roles.ApplicationNameスレッドセーフを作成するにはどうすればよいですか?
各ユーザーは複数のアプリケーションのメンバーになる可能性があるため、Roles.ApplicationName
を使用して、構成された各アプリケーションを順番に実行し、それらがメンバーになっている役割を判断します。各アプリケーションをチェックした後、私はRoles.ApplicationName
を管理アプリケーションである元のアプリケーションに戻しました。
私が抱えている問題は、複数のユーザーがそれぞれ個々のアプリケーションを見て、Roles.GetAllRoles()
のリクエストが行われたときです。ほとんどの場合、戻ってくる役割は意図したアプリケーションの役割ですが、アプリケーションごとにRoles.ApplicationName
を循環する他の要求によって間違ったアプリケーションの役割が戻ってくることがあります。
Roles.ApplicationName
はスレッドセーフではないため、Webアプリケーションで使用しないでくださいが、アプリケーションのロールモデルを書き換える必要はありません。
また、aspnetdbアプリケーションはこの管理システムによって作成されるため、アプリケーションごとに1つずつ複数のRoleProviderを作成することはできません。
これは、SqlRoleProviderをラップして、メソッドに対してロックを作成することで正確に行いました。これはまだ問題につながっているようです。しかし、私は基本的なRoleProviderオブジェクトをラップし、適切なaspnetdb spsへの呼び出しを手動ですべてうまくいきました。 –