Ответ 1
Я обнаружил, что проблема связана с добавлением пользователя домена в локальную группу, но позже этот пользователь домена удален из Active Directory. Состояние этой локальной группы заключается в том, что вместо имени пользователя домена, отображаемого как член, вместо этого используется SID.
НО!
Тот факт, что SID не существует в Active Directory, больше не приводит к буму.
Конечно, может возникнуть много других причин появления NoMatchingPrincipalException, поэтому этот код обеспечивает обходное решение для этого. Это происходит из потрясающей публикации в MSDN. Код ниже - это модифицированная версия, найденная здесь:
public static IEnumerable<Principal> getAuthorizationGroups(UserPrincipal user)
{
PrincipalSearchResult<Principal> groups = user.GetAuthorizationGroups();
List<Principal> ret = new List<Principal>();
var iterGroup = groups.GetEnumerator();
using (iterGroup)
{
while (iterGroup.MoveNext())
{
try
{
Principal p = iterGroup.Current;
Console.WriteLine(p.Name);
ret.Add(p);
}
catch (NoMatchingPrincipalException pex)
{
continue;
}
}
}
return ret;
}