Я работаю в C # и пытаюсь использовать DirectorySearch для запроса групп очень большого LDAP-сервера Microsoft ActiveDirectory.
Итак, в моем приложении у меня будет постраничный списокгруппы, с возможностью поиска.Естественно, я не хочу забивать свой сервер LDAP, передавая мне полный набор результатов для этих запросов каждый раз, когда я нажимаю «Следующая страница».
Есть ли способ, используя DirectorySearch, получать ТОЛЬКО результаты одной произвольной страницы, а не возвращать весь набор результатов за один вызов метода?
Подобные вопросы:
Существует много подобных вопросов, когда кто-то спрашивает о подкачке страниц (имеется в виду от сервера LDAP к серверу приложений) и получает ответы, включающие PageSize и SizeLimit.Однако эти свойства влияют только на подкачку между сервером C # и сервером LDAP, и, в конце концов, единственные релевантные методы, которые есть в DirectorySearch, это FindOne () и FindAll ().
То, что я ищу, это в основном «FindPaged (pageSize, pageNumber)» (pageNumber - действительно важный бит. Я не просто хочу первые 1000 результатов, я хочу (например) 100Набор результатов 1000. Приложение не может дождаться, когда 100000 записей будут переданы с сервера LDAP на сервер приложений, даже если они разбиты на порции по 1000 записей.
Я понимаю, что DirectoryServices.Protocols имеет SearchRequest, который (я думаю?) Позволяет вам использовать «PageResultRequestControl», который выглядит так, как будто он имеет то, что я ищу (хотя похоже, что информация о подкачке приходит в «куки», что я неконечно, как я должен был бы восстановить). Но если есть способ сделать это без переписывания всей вещи для использования протоколов вместо этого, я бы предпочел не делать этого.
Я просто не могупредставьте себе, что нет никакого способа сделать это ... Даже в SQL есть Row_Number.
ОБНОВЛЕНИЕ: PageResultRequestControl не помогает - это только вперед и последовательно (Вы должны вызватьи получить первые N результатов, прежде чем вы сможете получить токен «cookie», необходимый для выполнения вызова, чтобы получить результат N + 1).
Однако cookie, по-видимому, имеет своего рода воспроизводимое упорядочение ...В наборе результатов, над которым я работал, я перебирал результаты один за другим, и каждый раз, когда печенье получалось таким образом:
1: {8, 0, 0, 0}
2: {11, 0, 0, 0}
3: {12, 0, 0, 0}
4: {16, 0, 0, 0}
Когда я перебирал два на два, я получал одинаковые числа (11, 16).Это заставляет меня думать, что если бы я мог выяснить код того, как генерируются эти числа, я мог бы создать специальный файл cookie, который дал бы мне именно тот поисковый вызов, который я ищу.