метод findone () активного каталога - PullRequest
2 голосов
/ 25 октября 2011

я пытаюсь запросить объявление с помощью этой строки

            DirectoryEntry de = null;
            SearchResult results = null;
            de = new DirectoryEntry();

            //geting the result FROM ad
            de.Path = dr.manager;
            de.AuthenticationType = AuthenticationTypes.Secure;
            DirectorySearcher search = new DirectorySearcher(de);
            search.Filter = string.Format("(objectClass={0})",'*');
            search.PropertiesToLoad.Add("IsraelID");
            results = search.FindOne();
            de = results.GetDirectoryEntry();

но я получаю исключение в findone ()

System.Runtime.InteropServices.COMException (0x80004005): Unspecified error

   at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
   at System.DirectoryServices.DirectoryEntry.Bind()
   at System.DirectoryServices.DirectoryEntry.get_AdsObject()
   at System.DirectoryServices.DirectorySearcher.FindAll(Boolean findMoreThanOne)
   at System.DirectoryServices.DirectorySearcher.FindOne()

Ответы [ 4 ]

9 голосов
/ 25 октября 2011

Неуказанная ошибка означает, что в вашем пути LDAP отсутствует идентификатор протокола LDAP.Убедитесь, что ваш путь содержит идентификатор протокола LDAP в верхнем регистре.

Пример:

DirectoryEntry de = null; 
SearchResult results = null; 
de = new DirectoryEntry(); 

// Assuming your domain dns name is treyresearch.net 
de.Path = "LDAP://servername/CN=users,DC=treyresearch,DC=net"; 
de.AuthenticationType = AuthenticationTypes.Secure; 
de.Username = "treyresearch\\Administrator";
de.Password = "P@$$W0rd";
DirectorySearcher search = new DirectorySearcher(de); 
search.Filter = string.Format("(objectClass={0})",'*'); 
search.PropertiesToLoad.Add("IsraelID"); 
results = search.FindOne(); 
de = results.GetDirectoryEntry(); 

Надеюсь, это поможет.

2 голосов
/ 25 октября 2011
string LDAP = "LDAP://DC=MYDOMAIN,DC=COM";
using (DirectoryEntry dirEntry = new DirectoryEntry(LDAP, null, null, AuthenticationTypes.Secure))
    using (DirectorySearcher dirSearch = new DirectorySearcher(
        dirEntry,
        string.Concat("(objectClass=*)"),
        new string[] { "IsraelID" }))
    {
        SearchResult result = dirSearch.FindOne();
        if (result != null)
            return result.Properties["IsraelID"][0].ToString();
        else
            return null;
    }

Примечание: Строка.Concat () вокруг оператора "(objectClass = *)" существует, поскольку там обычно добавляются дополнительные операторы или переменные.

MakeЯ уверен, что у вас есть правильная строка LDAP, и я бы посоветовал использовать операторы для того, чтобы вы потом избавились от всего.

1 голос
/ 26 октября 2011

остро моя ошибка была гораздо более простой, чем упомянутое исключение .. я написал эту неправильную инструкцию активного каталога

de.path=dr.dr.manager   

, когда я добавил "LDAP: //" в утверждение, которое оно решает

de.Path = "LDAP://"+dr.manager;

спасибо за поддержку

0 голосов
/ 25 октября 2011

попробуй свой путь:

/* Connection to Active Directory
 */
DirectoryEntry deBase = new DirectoryEntry("LDAP://WM2008R2ENT:389/dc=dom,dc=fr", "jpb", "Pwd");
//DirectoryEntry deBase = new DirectoryEntry("LDAP://WM2008R2ENT:389/dc=dom,dc=fr");

/* Directory Search
 */
DirectorySearcher dsLookForOUs = new DirectorySearcher(deBase);
dsLookForOUs.Filter = "(objectCategory=organizationalUnit)";
dsLookForOUs.SearchScope = SearchScope.Subtree;
dsLookForOUs.PropertiesToLoad.Add("cn");
dsLookForOUs.PropertiesToLoad.Add("ou");

SearchResultCollection srcOUs = dsLookForOUs.FindAll();

foreach (SearchResult srOU in srcOUs)
{
  Console.WriteLine("{0}", srOU.Path);

}

В этом случае я аутентифицируюсь как пользователь и пароль. Если вы запускаете программу с компьютера внутри домена, вам не нужно проходить аутентификацию. У вас есть хороший образец здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...