Превышен административный предел при поиске в C # LDAP - PullRequest
1 голос
/ 08 июля 2010

Я пытаюсь выполнить поиск LDAP, но получаю следующую ошибку:

Unhandled Exception: System.Runtime.InteropServices.COMException (0x80072024): T
he administrative limit for this request was exceeded.

   at System.DirectoryServices.SearchResultCollection.ResultsEnumerator.MoveNext
()
   at System.DirectoryServices.DirectorySearcher.FindOne()

Вот код: (Ошибка выдается в FindOne ())

        DirectoryEntry dirEntry = new DirectoryEntry("LDAP://myldap.com:1701/ou=People,o=My Company,c=CA", "", "", AuthenticationTypes.Anonymous);
        DirectorySearcher dirSearcher = new DirectorySearcher(dirEntry);

        string filter = "mail";
        string filterValue = "my.email@mycompany.com";

        dirSearcher.Filter = string.Format("({0}={1})", filter, filterValue);

        SortOption sortOption = new SortOption(filter, SortDirection.Ascending);

        dirSearcher.Sort = sortOption;
        dirSearcher.PropertiesToLoad.Add("uid");
        dirSearcher.SearchScope = SearchScope.Subtree;

        SearchResult result = dirSearcher.FindOne();

        DirectoryEntry directEntry = result.GetDirectoryEntry();
        Console.WriteLine("Result: {0}", directEntry.Properties["uid"].Value.ToString());

Есть идеи как обойти это?

Ответы [ 2 ]

1 голос
/ 08 июля 2010

Удалена эта строка, и она работает:

dirSearcher.PropertiesToLoad.Add("uid");

Должно быть, UID извлекается из каждого результата, а не только из совпадения, и поэтому превышает лимит администратора.

1 голос
/ 08 июля 2010

Многие реализации сервера LDAP имеют ограничения на количество результатов, возвращаемых в запросе.

AD по умолчанию 1000 или 2000. Я забываю не по порядку.По умолчанию eDirectory не имеет ограничений.Другие могут быть разными.

Вы можете либо попросить администраторов изменить ограничение, либо, иначе, постраничать по вашему коду, чтобы он одновременно получал только страницу (или ограниченное количество результатов).

...