我目前正在寫負責管理用戶在一個ASPNETDB實例的用戶管理應用程序。此單個實例包含多個「應用程序」,這些「應用程序」都具有分配給各個應用程序的角色如何使Roles.ApplicationName線程安全?
由於每個用戶可以是多個應用程序的成員我使用Roles.ApplicationName
循環通過每個配置的應用程序,然後確定它們中的一員,其作用。在檢查每個應用程序後,我將Roles.ApplicationName
設置回管理應用程序的原始應用程序。
我遇到的問題是當多個用戶eachview單個應用程序和用於Roles.GetAllRoles()
一個請求。大多數情況下,返回的角色是針對預期的應用程序的,但是由於其他請求在每個應用程序上循環使用Roles.ApplicationName
,有時錯誤的應用程序角色會回來。
我已經讀了Roles.ApplicationName
不是線程安全的,因此不應該在Web應用程序中使用,但我寧願有一個解決方案,而不必在應用程序中重寫角色模型。
此外,ASPNETDB應用通過該管理系統創建,因此我不能創建多個RoleProviders,每個應用程序之一。
我通過包裝SqlRoleProvider和創建的方法準確鎖定做到了這一點。這似乎仍然導致問題。但是,當我包裝基本的RoleProvider對象,並手動調用適當的aspnetdb sps時,一切都很好。 – 2011-03-23 09:10:08