自定义角色提供程序缓存故

时间:2010-09-27 12:18:09

标签: c# .net asp.net asp.net-roles

我编写了自定义角色提供程序,它在内部使用Web服务方法来获取角色或用户名。此提供程序继承自 System.Web.Security.RoleProvider 。在 web.config 文件中,我启用了.NET提供的使用cookie的缓存功能。

以下是此提供商的 web.config 部分:

<system.web>      
      <roleManager defaultProvider="MyProvider"
                 enabled="true"
                 cacheRolesInCookie="true"
                 cookieName=".MYROLES"
                 cookieTimeout="30"
                 cookiePath="/"
                 cookieRequireSSL="false"
                 cookieSlidingExpiration="true"
                 cookieProtection="All">
        <providers>
          <clear/>
          <add name="MYProvider"
               type="MYProvider.MyRoleProvider, MYProvider"
               Service1URL="http://localhost:54013/service1.asmx"
               Service2URL="http://localhost:54013/service2.asmx"
               rolesPrefix="ABC_"
               domainName="abc.corp"
               specialUserForAllRoles="abc"
               applicationURL="http://example.com"
               logCommunication="true"/>
        </providers>
      </roleManager>
</system.web>

现在,它来测试缓存是否正常工作。我写了一个简单的方法,看起来像这样:

public void TestCache()
{
   string[] roles = Roles.GetAllRoles();
   roles = Roles.GetAllRoles();

   string[] rolesForUser1 = Roles.GetRolesForUser("user1");
   rolesForUser1 = Roles.GetRolesForUser("user1");

   string[] usersInRole = Roles.GetUsersInRole("ABC_DEV");
   usersInRole = Roles.GetUsersInRole("ABC_DEV");       

   Roles.IsUserInRole("user1", "ABC_DEV");
   Roles.IsUserInRole("user1", "ABC_DEV");
}

在调试这段代码时(来自测试网站),调试器在提供程序中输入每个显示的方法并执行内部的所有逻辑,尽管方法归纳是多余的。我认为不应该执行每个方法的第二次调用,因为返回的结果不会直接从缓存中询问我的提供者。

我正在做什么/想错了以及如何修复缓存功能?

此致

1 个答案:

答案 0 :(得分:1)

角色缓存仅适用于当前用户的角色。这应该缓存:

var isInRole = User.IsInRole("ABC_DEV")

http://msdn.microsoft.com/en-us/library/ms164660(VS.80).aspx