Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Ldap Novell загрузка более 1000 юзеров из active directory / 3 сообщений из 3, страница 1 из 1
13.01.2020, 04:59
    #39913072
Гоша228
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ldap Novell загрузка более 1000 юзеров из active directory
есть такой код который предполагает постраничную загрузку пользователей из active directory, для того чтобы преодолеть барьер в 1000 обычно установленный на стороне сервера. Но есть проблема! при его выполнение срабатывает эксепшн "Unavailable Critical Extension". Похожие темы есть на стекоферфлоу но только вот ответа там нет, вернее тот что есть он также не работает (собственно это самый лучший вариант кода). Причем если в АД пользователей меньше тысячи либо запрос возвращает меньше тысячи то код работает.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
 // Connection
        var ldapConn = new LdapConnection()
        {
            SecureSocketLayer = true,
        };
        ldapConn.UserDefinedServerCertValidationDelegate += (sender, certificate, chain, sslPolicyErrors) => true;
        ldapConn.Connect(host, 636);            
        ldapConn.Bind(username, password);


        var searchConstraints = (LdapSearchConstraints)ldapConn.SearchConstraints.Clone();
        int contentCount = 0, count = 0, startIndex = 1, pageSize = 1000;
        bool exit;

        do
        {
            // Add Virtual List Control
            searchConstraints.setControls(new List<LdapControl>
            {
                { new LdapVirtualListControl(startIndex, 0, pageSize - 1, contentCount) },
                { new LdapSortControl(new LdapSortKey[1] { new LdapSortKey("name") },true) }
            }.ToArray());

            // Perform search
            var searchResult = ldapConn.Search(container, scope, query, null, false, searchConstraints);

            // Get entries in page
            var inPageCount = 0;
            while (searchResult.hasMore())
            {

                // Detect max result error
                LdapSortResponse ldapControl = searchResult.ResponseControls?.OfType<LdapSortResponse>().FirstOrDefault();
                if (ldapControl != null && ldapControl.ResultCode == 53) throw new LdapResultLimitExceeded(string.Format("ActiveDirectory: Ldap result limit exceeded in {0}.", container));

                searchResult.next();
                inPageCount++;
            }

            // Check for more pages 
            var control = FindResponseControl(searchResult, ActiveDirectoryService.LDAP_SERVER_VIRTUAL_LIST_VIEW_OID);
            if (control != null)
            {
                var response = new LdapVirtualListResponse(control.ID, control.Critical, control.getValue());
                startIndex += pageSize;
                contentCount = response.ContentCount;
                if (count + pageSize > contentCount) count = contentCount; else count += inPageCount;
            }
            exit = control == null;
        } while (count < contentCount && contentCount > 0 && !exit);
...
Рейтинг: 0 / 0
13.01.2020, 11:30
    #39913129
Дмитрий Мух
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ldap Novell загрузка более 1000 юзеров из active directory
Гоша228,

хорошо бы увидеть StackTrace исключения
...
Рейтинг: 0 / 0
13.01.2020, 12:21
    #39913157
Гоша228
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ldap Novell загрузка более 1000 юзеров из active directory
Дмитрий Мух
Гоша228,

хорошо бы увидеть StackTrace исключения

вот на этой строчке
Код: c#
1.
searchResult.next();
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Ldap Novell загрузка более 1000 юзеров из active directory / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]