Active Directory (AD DS) имеет концепцию «контроллеры домена только для чтения» (RODC). Вероятно, для обратной совместимости по умолчанию игнорируются контроллеры домена только для чтения: вы должны явно указать, что вы разрешаете подключаться к контроллеру домена только для чтения.Как может PrincipalContext/UserPrincipal.FindByIdentity() использовать контроллер домена только для чтения?
В нашем коде C# мы видим это в двух местах. Один из них заключается в создании нового System.DirectoryServices.DirectoryEntry: проблема легко решить, установив флаг System.DirectoryServices.AuthenticationTypes.ReadonlyServer, который позволяет использовать RODC.
Мой вопрос в том, как достичь того же для кода, как следующий, который использует классы из System.DirectoryServices.AccountManagement имен:
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
using (UserPrincipal userPrincipal = UserPrincipal.FindByIdentity(
ctx,
IdentityType.SamAccountName,
...))
{
// ...
}
, так как мы наблюдали, что этот код игнорирует все контроллеры домена только для чтения.
(Обратите внимание, что выше точно такой же вопрос, как отвечал на MSDN "Visual C# General" forum в потоке под названием "Issue connecting to read-only domain controller (RODC) from C# application through System.DirectoryServices.AccountManagement".)
OK, спасибо за это «невозможно». Все, что мы пытаемся сделать в этом конкретном коде, - это получить UPN с именем sAMAccountName пользователя, который не требует доступа на запись. Я предполагаю, что это означает, что мы должны делать это через «DirectoryEntry» вместо этого? Так или иначе, я попытаюсь. –