Я написал собственный поставщик ролей, который внутренне использует методы веб-службы для получения ролей или имен пользователей. Этот провайдер наследует от System.Web.Security.RoleProvider . В файле web.config я включил функцию кэширования .NET, которая использует куки.
Вот как выглядит 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");
}
При отладке этого фрагмента кода (с тестового веб-сайта) отладчик вводит каждый из показанных методов в провайдере и выполняет всю логику внутри, несмотря на то, что индукция метода является избыточной или нет. Я думал, что второй вызов каждого метода не должен выполняться, потому что результат будет возвращен без запроса моего провайдера непосредственно из кэша.
Что я делаю / неправильно думаю и как исправить функцию кэширования?
Привет