PrincipalContext не подключается - PullRequest
       39

PrincipalContext не подключается

12 голосов
/ 27 сентября 2011

Я пытаюсь использовать PrincipalContext для веб-сервиса, который я разрабатываю. Я уже использовал проверку подлинности с помощью форм на веб-сервере в другом приложении, и он отлично работает.

Ошибка, которую я получаю:

System.DirectoryServices.AccountManagement.PrincipalServerDownException: The server could not be contacted. ---> System.DirectoryServices.Protocols.LdapException: The LDAP server is unavailable.
   at System.DirectoryServices.Protocols.LdapConnection.Connect()
   at System.DirectoryServices.Protocols.LdapConnection.SendRequestHelper(DirectoryRequest request, Int32& messageID)
   at System.DirectoryServices.Protocols.LdapConnection.SendRequest(DirectoryRequest request, TimeSpan requestTimeout)
   at System.DirectoryServices.Protocols.LdapConnection.SendRequest(DirectoryRequest request)
   at System.DirectoryServices.AccountManagement.PrincipalContext.ReadServerConfig(String serverName, ServerProperties& properties)
   --- End of inner exception stack trace ---
   at System.DirectoryServices.AccountManagement.PrincipalContext.ReadServerConfig(String serverName, ServerProperties& properties)
   at System.DirectoryServices.AccountManagement.PrincipalContext.DoServerVerifyAndPropRetrieval()
   at System.DirectoryServices.AccountManagement.PrincipalContext..ctor(ContextType contextType, String name, String container, ContextOptions options, String userName, String password)
   at System.DirectoryServices.AccountManagement.PrincipalContext..ctor(ContextType contextType, String name, String container, String userName, String password)
   at webService.Service1.ValidUser(String sUserName) in E:\Development\CSharpApps\Desktop\OrgChart\webService\Service1.asmx.cs:line 158

Наш веб-сервер находится в демилитаризованной зоне и получает доступ к домену через брандмауэр. Я использую информацию о порте и т. Д., Как показано ниже.

Это работает с использованием ip из моего окна разработки, однако оно находится внутри брандмауэра. Информация ip, которую я отправляю ему, такая же, как и при аутентификации через веб-формы.

 PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "192.168.1.1:389", "dc=doodlie,dc=com",@"doodlie\admin","doodliesquat");

Ответы [ 3 ]

0 голосов
/ 22 июня 2015

В моем случае удаление номера порта из URL работало

0 голосов
/ 09 ноября 2016

Может быть, я что-то упускаю, но на самом деле вам не нужно указывать сервер AD, вы можете просто сказать:

PrincipalContext ctx = new PrincipalContext(ContextType.Domain);

И он должен найти любой DC в текущем домене приложения, в котором ономогу найти.Если это сеть с отказоустойчивостью, когда один не работает, другой должен поднять.Я не уверен, почему была бы причина попасть в него, в частности, как в исходном вопросе, если только он не находится в другом домене.Если это так, вы можете вместо этого попробовать разместить свой веб-сервис в этом домене и использовать DNS и сервер пересылки для вызова / маршрутизации на новый IP-адрес вашего веб-сервиса в новом домене, если это необходимо, или использовать запись в файле Hosts.Или просто обратитесь к веб-сервису по IP.

0 голосов
/ 29 апреля 2014

Вне зависимости от проблемы, установка некоторых из этих бесценных инструментов для администрирования и устранения неполадок AD была для меня божьей посылкой.

Если возможно, установите средства удаленного администрирования сервера (RSAT) на свой компьютер или веб-сервер (если это разрешено), а затем используйте клиент Active Directory для пользователей и компьютеров, чтобы определить точный URL-адрес / IP-адрес вашего контроллера домена. Если вы не можете подключиться с помощью этих инструментов, это может стать отправной точкой для перехода к поддержке ИТ / dev ops

В дополнение к этому учетная запись AD / службы, под которой запущено приложение веб-сайта, может не иметь достаточных привилегий для доступа к контроллеру домена. Я имел успех с

using (HostingEnvironment.Impersonate())
{
    // code in here. 
}

Пул приложений, под которым выполняется приложение веб-сайта в IIS, должен запускаться под учетной записью пользователя, обладающей соответствующими привилегиями. (Должен быть не только сетевой сервис)

...