Я использую этот метод, чтобы возвращать все группы (рекурсивно), из которых пользователь является членом, чтобы я мог выполнить некоторую авторизацию на уровне приложения.Сколько я должен кэшировать результаты запросов 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[] {};
}
}
}