System.DirectoryServices.Protocols.SearchRequest Проблема выполнения запроса Ldap - PullRequest
2 голосов
/ 09 февраля 2012

Я использую класс DirectorySearcher для запроса активного каталога.Выдает все записи на одной странице (более 5000).Я хочу получить 100 записей на странице.Поэтому я перешел в класс SearchRequest.Используя класс SearchRequest, я могу получить 100 записей на страницу.Но для конкретного запроса это не работает.Я хочу, чтобы все пользователи с их "samaccountname или displayname начинались с 'a'" работали нормально.Затем я хочу получить всех пользователей с их "samaccountname и displayname начинается с 'a'", это не работает.Я могу предположить причину, некоторые пользователи начинают свое имя samaccount с отсутствующим отображаемым именем.Любое решение этой проблемы?Пожалуйста, ведите меня

Пожалуйста, используйте следующий код

        //This query works fine
        //string filter = "(&(objectCategory=person)(objectClass=user)(!sAMAccountType=805306370)(|(samaccountname=a*)(displayname=a*)))";


        /* Not works */
        string filter = "(&(objectCategory=person)(objectClass=user)(!sAMAccountType=805306370)(&(samaccountname=a*)(displayname=a*)))";
        LdapConnection connection = new LdapConnection(serverName);
        string[] attribs = { "samaccountname", "displayname" };

        // create a SearchRequest object
        SearchRequest searchRequest = new SearchRequest
                                                (scope,
                                                 filter,
                                                 System.DirectoryServices.Protocols.SearchScope.Subtree,
                                                 attribs);

        SortRequestControl sortRequest = new SortRequestControl("samaccountname", false);
        searchRequest.Controls.Add(sortRequest);

        VlvRequestControl vlvRequest =
            new VlvRequestControl(0, numEntries, offsetVal);
        searchRequest.Controls.Add(vlvRequest);

        SearchResponse searchResponse =
            (SearchResponse)connection.SendRequest(searchRequest);

        if (searchResponse.Controls.Length != 2 ||
            !(searchResponse.Controls[0] is SortResponseControl))
        {
            Console.WriteLine("The server does not support VLV");
            return null;
        }

1 Ответ

0 голосов
/ 10 февраля 2012

Вы действительно хотите displayName в Active Directory? Возможно, более точный выбор - fullName или CN.

...