UserPrincipal.GetGroups не работает с неизвестной ошибкой
Я пытаюсь получить все группы Active Directory для пользователя со следующим кодом:
private static IEnumerable<string> GetGroupNames(string userName)
{
using (var context = new PrincipalContext(ContextType.Domain))
{
using (var userPrincipal = UserPrincipal.FindByIdentity(context, userName))
{
var groupSearch = userPrincipal.GetGroups(context);
var result = new List<string>();
foreach (var principal in groupSearch)
{
Log.LogDebug("User {0} is member of group {0}", userPrincipal.DisplayName, principal.DisplayName);
result.Add(principal.SamAccountName);
}
return result;
}
}
}
Этот код правильно находит принципала пользователя, но не работает, когда GetGroups вызывается с использованием принципального исключения: Неизвестная ошибка (0x80005000).
Исключение корня:
at System.DirectoryServices.AccountManagement.ADStoreCtx.GetGroupsMemberOf(Principal foreignPrincipal, StoreCtx foreignContext)
at System.DirectoryServices.AccountManagement.Principal.GetGroupsHelper(PrincipalContext contextToQuery)
at System.DirectoryServices.AccountManagement.Principal.GetGroups(PrincipalContext contextToQuery)
at [line of the GetGroup call]
Внутреннее исключение (COMException):
at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
at System.DirectoryServices.DirectoryEntry.Bind()
at System.DirectoryServices.DirectoryEntry.get_AdsObject()
at System.DirectoryServices.PropertyValueCollection.PopulateList()
at System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry entry, String propertyName)
at System.DirectoryServices.PropertyCollection.get_Item(String propertyName)
at System.DirectoryServices.AccountManagement.ADUtils.RetriveWkDn(DirectoryEntry deBase, String defaultNamingContext, String serverN
Другой отчет с этой проблемой.
Любые подсказки?
Ответы
Ответ 1
Добавление Environment.UserDomainName в качестве аргумента имени в PrincipalContext помогло:
using (var context = new PrincipalContext(ContextType.Domain, Environment.UserDomainName))
Я до сих пор не знаю, почему PrincipalContext (ContextType.Domain) работает только для поиска UserPrincipal, а не для групп пользователей. Сообщение об ошибке COM "неизвестная ошибка" не очень полезно и перегрузка конструктора PrincipalContext с использованием только ContextType практически не документируется в MSDN. Это пахнет проблемой с платформой .NET, как указал Харви Квок.