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