代码之家  ›  专栏  ›  技术社区  ›  jwaliszko

自定义角色提供程序缓存疑难解答

  •  0
  • jwaliszko  · 技术社区  · 14 年前

    我已经编写了自定义角色提供程序,它在内部使用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 回复  |  直到 14 年前
        1
  •  1
  •   onof    14 年前
    推荐文章