2010-09-27 112 views
0

我編寫了自定義角色提供程序,它在內部使用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"); 
} 

在調試這一段代碼(來自測試網站),調試器進入每個在提供商所示的方法和內,執行所有邏輯儘管方法感應是多餘的或不是。我認爲每個方法的第二次調用不應執行,因爲結果將直接從緩存中直接詢問我的提供程序而返回。

我在做什麼/思考錯誤以及如何修復緩存功能?

Regards

回答

1

角色緩存僅適用於當前用戶的角色。這應該是緩存:

var isInRole = User.IsInRole("ABC_DEV") 

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

+0

感謝您的答覆。我已經看到,角色信息總是緩存在請求中(緩存可以啓用或禁用),但啓用cookie緩存後,角色還可以在請求之間緩存。 – jwaliszko 2010-09-27 13:26:48