не может подключиться к AD без специального подключения к DC - PullRequest
1 голос
/ 21 марта 2011

Я пытаюсь привязаться к серверу Active Directory в C #, но на месте у меня, похоже, есть проблемы, которые невозможно воспроизвести в тестовой среде.

Я получаю исключение

System.Runtime.InteropServices.COMException (0x8007203A): The server is not operational.
   at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
   at System.DirectoryServices.DirectoryEntry.Bind()
   at System.DirectoryServices.DirectoryEntry.RefreshCache()
   at System.DirectoryServices.DirectoryEntry.FillCache(String propertyName)
   at System.DirectoryServices.DirectoryEntry.get_NativeGuid()  

код выглядит следующим образом

// domainStr = "LDAP://domainname/rootDSE
using (var de = new DirectoryEntry(domainStr, Username, Password))
{
    var guid = de.NativeGuid;
}

, однако, если я вместо этого пытаюсь подключить контроллер домена (domainStr = "LDAP://domainController/rootDSE" или полностью квалифицирован domainStr = "LDAP://domainController.DomainName"), он работает просто отлично.

Я попытался

var d = Domain.GetDomain(new DirectoryContext(
            DirectoryContextType.Domain,
            domainStr,
            Username,
            Password));

, но при этом получаю точно такое же исключение.

Мне интересно, если я делаю что-то не так, возможно, другой URL-адрес LDAP будет работать лучше, или еслиэто общая проблема, с которой я сталкиваюсь (несмотря на то, что поиск в Google выявляет эту проблему, я не нашел решения, которое подходит мне)

Также, возможно, стоит указать, что сервер работает на программном обеспеченииотсутствует в Active Directory, и у меня есть список AD, к которым я подключаюсь (отсюда имя пользователя и пароль при попытке подключения)

1 Ответ

2 голосов
/ 22 марта 2011

Это потому, что DNS-сервер не имеет записи A для домена. DNS-сервер не знает, какой IP-адрес разрешать при передаче ему доменного имени. Обычно у вас нет этой проблемы, потому что по умолчанию встроенный DNS-сервер MS Windows добавляет эту запись A для вас. Однако на крупных предприятиях очень часто они не используют встроенный DNS-сервер MS Windows. Во многих случаях люди просто не удосуживаются добавить запись A к доменному имени.

Если возможно, вы можете попросить своего клиента добавить запись A на DNS-сервер. В качестве альтернативы, попросите клиента исправить файл c: \ windows \ system32 \ drivers \ etc \ hosts. Затем добавьте запись A туда. Вы можете просто указать на любой контроллер домена. Однако этот подход не масштабируется, поскольку все пользователи на разных сайтах собираются разрешить доменное имя в один и тот же IP-адрес. Некоторым пользователям удаленных сайтов могут быть проблемы с медлительностью.

Если вы также хотите решить проблему масштабируемости, вы можете выдать себя за пользователя вместо передачи пароля имени пользователя в DirectoryEntry. После того, как вы олицетворяете пользователя домена, вы можете использовать привязку без сервера, например LDAP://RootDSE.

...