В .Net 4.0 может ли DirectorySearch возвращать результаты LDAP таким образом, чтобы я мог их просматривать?

Я работаю на 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 , что даст мне именно то пейджинговое сообщение, которое я ищу.

7
задан Community 23 May 2017 в 11:52
поделиться