Не удается создать PrincipalContext в ActiveDirectory

Я использую этот код из приложения .NET Forms, чтобы попытаться создать объект PrincipalContext.

var oPrincipalContext = new PrincipalContext(
                ContextType.Domain, 
                "mydomain.workgroup",
                "CN=users,CN=mydomain,CN=workgroup", 
                ContextOptions.Bind,                    
                "ADAdmin", 
                "ADAdminPassword");

Я также пробовал это, но получил ту же ошибку.

var oPrincipalContext = new PrincipalContext(
                ContextType.Domain, 
                "mydomain.workgroup",
                "CN=users,CN=mydomain,CN=workgroup", 
                ContextOptions.Negotiate,                    
                "ADAdmin", 
                "ADAdminPassword");

Я также пробовал [email protected] в качестве идентификатора пользователя.

я получаю эту ошибку

Message=An operations error occurred.

StackTrace=   at System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInit()
   at System.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit()
   at System.DirectoryServices.AccountManagement.PrincipalContext.Initialize()
   at System.DirectoryServices.AccountManagement.PrincipalContext.get_ConnectedServer()
   at WindowsFormsApplication1.Form1.button1_Click(Object sender, EventArgs e)

InnerException=An operations error occurred.

StackTrace=   at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
   at System.DirectoryServices.DirectoryEntry.Bind()
   at System.DirectoryServices.DirectoryEntry.get_SchemaEntry()
   at System.DirectoryServices.AccountManagement.ADStoreCtx.IsContainer(DirectoryEntry de)
   at System.DirectoryServices.AccountManagement.ADStoreCtx..ctor(DirectoryEntry ctxBase, Boolean ownCtxBase, String username, String password, ContextOptions options)
   at System.DirectoryServices.AccountManagement.PrincipalContext.CreateContextFromDirectoryEntry(DirectoryEntry entry)
   at System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInit()

Я вошел в систему как пользователь с привилегиями DomainAdmin в AD.

Компьютер, с которого я это запускаю, имеет привилегии DomainAdmin в AD.

По этой ссылке есть решение, но оно предназначено для IIS и это не сработало для меня.

Это решение тоже не работал.


person Heinrich    schedule 18.08.2015    source источник
comment
Попробуйте PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "yourdomain.com", "CN=users,CN=mydomain,CN=workgroup", ContextOptions.SecureSocketLayer | ContextOptions.Negotiate, userName, password); Поскольку у вас уже есть права администратора, просто попробуйте выполнить привязку, просто указав имя домена. PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "yourdomain.com");   -  person smr5    schedule 18.08.2015
comment
Я использовал SecureSocketLayer и получил эту ошибку The ContextOptions passed are invalid for this store type. Either Negotiate or SimpleBind must be specified and they cannot be combined.   -  person Heinrich    schedule 18.08.2015
comment
Похоже, у вас не установлено SSL. Попробуйте SimpleBind.   -  person smr5    schedule 18.08.2015
comment
@Burzum второе предложение в вашем первом комментарии сработало, я просто использовал домен, и это сработало.   -  person Heinrich    schedule 18.08.2015
comment
Я рад, что смог помочь.   -  person smr5    schedule 18.08.2015
comment
@Burzum У меня та же проблема с приложением ASP.NET, работающим на том же сервере в IIS7.5. Я изменил идентификатор AppPool, чтобы работать от имени пользователя domainadmin, но это не помогает. Я использую тот же код. Любые идеи?   -  person Heinrich    schedule 18.08.2015
comment
Пожалуйста, откройте новый вопрос и предоставьте некоторые сведения о вашем IIS.   -  person smr5    schedule 18.08.2015
comment
@Burzum Я внес такое же изменение в свое приложение ASP.NET, и оно сработало. Спасибо!   -  person Heinrich    schedule 18.08.2015


Ответы (1)


Поскольку вы упомянули, что у пользователя уже есть права администратора, вам нужно указать только ContextType и ваш Domain.

PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "yourdomain.com");
person smr5    schedule 18.08.2015