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