【问题标题】:How do I make Roles.ApplicationName threadsafe?如何使 Roles.ApplicationName 线程安全?
【发布时间】:2011-07-13 10:55:45
【问题描述】:

我目前正在编写一个用户管理应用程序,它在单个 aspnetdb 实例中管理用户。这个单一实例包含多个“应用程序”,它们都具有针对各个应用程序分配的角色。

由于每个用户都可以是多个应用程序的成员,因此我使用Roles.ApplicationName 循环浏览每个已配置的应用程序,然后确定他们属于哪些角色。检查每个应用程序后,我将Roles.ApplicationName 设置回原始应用程序,即管理应用程序。

我遇到的问题是当多个用户每个查看一个单独的应用程序并请求Roles.GetAllRoles() 时。大多数情况下,返回的角色是针对预期应用程序的,但有时由于其他请求在每个应用程序的 Roles.ApplicationName 上循环,错误的应用程序的角色会返回。

我从那以后读到 Roles.ApplicationName 不是线程安全的,因此不应该在 Web 应用程序中使用,但我希望有一个解决方案,而不是必须在应用程序中重写角色模型。

另外,aspnetdb 应用程序是通过这个管理系统创建的,因此我不能创建多个 RoleProviders,每个应用程序一个。

【问题讨论】:

    标签: asp.net membership roles roleprovider


    【解决方案1】:

    您为什么不编写一个包装器来执行此操作,您可以实现自己的角色提供者,然后将适当的同步放在适当的位置。

    【讨论】:

    • 我正是通过包装 SqlRoleProvider 并在方法上创建锁来做到这一点的。这似乎仍然导致问题。但是,当我包装基本 RoleProvider 对象并手动调用适当的 aspnetdb sps 时,一切都很好。
    猜你喜欢
    • 1970-01-01
    • 2014-05-31
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    相关资源
    最近更新 更多