2015-07-14 3 views
0

Я использую этот метод, чтобы возвращать все группы (рекурсивно), из которых пользователь является членом, чтобы я мог выполнить некоторую авторизацию на уровне приложения.Сколько я должен кэшировать результаты запросов System.DirectoryServices.AccountManagement?

Я вызываю это довольно часто (скажем, каждые 10-20 секунд, пока пользователь активен) из процесса обслуживания, и я могу кэшировать результаты в (скажем) System.Runtime.Caching.MemoryCache ... однако, похоже, что результаты из GetAuthorizationGroups уже кэшируются (т. е. список не обновляется до тех пор, пока я не запустил службу)

Кто-нибудь знает, насколько оптимизация Microsoft уже вложила в структуру такого запроса ? То есть Я не хочу преждевременно оптимизировать кеширование без необходимости.

public static string[] GetActiveDirectoryGroups(string userName) 
    { 
     using (var context = new PrincipalContext(ContextType.Domain, "mydomain")) 
     { 
      using (var user = UserPrincipal.FindByIdentity(context, IdentityType.UserPrincipalName, userName)) 
      { 
       return user != null ? 
        user.GetAuthorizationGroups() 
         .Select(group => group.SamAccountName) 
         .ToArray() 
        : new string[] {}; 
      } 
     } 
    } 

ответ

0

Я не в курсе каких-либо встроенных кэширования в System.DirectoryServices.ActiveDirectory без явной конфигурации - например, с DirectorySearcher: https://msdn.microsoft.com/en-us/library/system.directoryservices.directorysearcher.cacheresults(v=vs.110).aspx

Если вы не делаете каких-либо кэширования, .NET не будет автоматически кэшировать вас. Он будет запрашивать Active Directory каждый раз, когда вы запускаете свою функцию. Похоже, что вы случайно хранили результаты вашего запроса в Active Directory и не видите обновлений, как вы могли ожидать.

В качестве альтернативы вы вносите изменения, а затем запрашиваете контроллер домена, который еще не был реплицирован. Когда вы перезагружаете службу, ваше приложение попадает в новый контроллер домена, где изменения были сделаны или были реплицированы.

Вся оптимизация кеширования должна быть выполнена на вашей стороне, вам нужно решить, как часто вы хотите запросить свой домен, чтобы проверить наличие обновлений членства.

 Смежные вопросы

  • Нет связанных вопросов^_^