Выполнение постраничного поиска в Active Directory с использованием System.DirectoryServices.Protocols - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь выполнить постраничный поиск в Active Directory, используя System.DirectoryServices.Protocols.PageResultRequestControl.

Я получаю результаты поиска в страницах, однако полученное мной searchResponse НЕ имеет правильного TotalCountдля общего количества страниц.

Не поддерживается?Или я что-то здесь упускаю?

Это пример кода, который я использовал для реализации выше.Я использую System.DirectoryServices.Protocols для запроса Active Directory.

Когда к номеру страницы добавляется PageResultRequestControl, все отлично работает, кроме totalSize.

Например, в этом коде

LdapConnection connection = new LdapConnection(ldapDirectoryIdentifier, credential);
SearchRequest sr = new SearchRequest("", "(displayName=*)", System.DirectoryServices.Protocols.SearchScope.Subtree, new[] { "displayName"});
PageResultRequestControl pr = new PageResultRequestControl(50);
SearchOptionsControl so = new SearchOptionsControl(SearchOption.DomainScope);

sr.Controls.Add(pr);
sr.Controls.Add(so);

SearchResponse searchResponse;

while (true)
{
    searchResponse = (SearchResponse)connection.SendRequest(sr);

    if (searchResponse.Controls.Length != 1 || !(searchResponse.Controls[0] is PageResultResponseControl))
    {
        totalPageCount = 0;
        return null;
    }

    PageResultResponseControl pageResponse = (PageResultResponseControl)searchResponse.Controls[0];

    totalPageCount = pageResponse.TotalCount;

    if (pageResponse.Cookie.Length == 0)
    {
        break;
    }
    else
    {
        pageRequest.Cookie = pageResponse.Cookie;
    }
}

1 Ответ

0 голосов
/ 11 июня 2018

Как сказано в документации, свойство TotalCount содержит приблизительный счетчик набора результатов (https://technet.microsoft.com/en-us/library/system.directoryservices.protocols.pageresultresponsecontrol.totalcount)

...