Невозможно быстро ответить на запрос AD - PullRequest
0 голосов
/ 06 января 2010

Я занимаюсь разработкой приложения SharePoint, для которого требуются пользователи из указанного подразделения Windows Server 2003 Active Directory.

Во-первых, меня не беспокоили операции «Dispose» и «Close» над объектами DirectoryServices. На этом этапе операции извлечения были быстрыми и успешными.

Но это приводило к ошибке «Сервер не работает» после 2-х попыток. И эта ошибка делает все приложение хуже, как при остановке других операций AD.

Затем я исправил эту ошибку, добавив операторы для каждого объекта DirectoryEntry, DirectorySearcher и SearchResultCollection.

Тогда я дошел до того, что у меня больше не появляется ошибка «Сервер не работает». Но когда я пытаюсь извлечь пользователей из AD 1 или более раз с помощью метода DirectorySearcher.FindAll, первый работает быстро и успешно, другие медленнее, но успешнее. Это отнимает время ожидания. Не могли бы вы помочь мне с моей ситуацией по поводу этого замедления?

Вот пример кода:

using (DirectoryEntry directoryEntry = new DirectoryEntry(connectionString, userName, password))
            {
                using (DirectorySearcher search = new DirectorySearcher(directoryEntry))
                {
                    search.SearchScope = SearchLevel.OneLevel;
                    search.ReferralChasing = ReferralChasingOption.All;
                    search.Filter = filter;
                    search.SizeLimit = 200;
                    //Limits the property count for search result
                    SetUserDirectorySearcherPropertiesToLoad(search);

                    using (SearchResultCollection result = search.FindAll())
                    {
                        foreach (SearchResult searchResult in result)
                        {
                            // Get user attributes
                        }}}}

Заранее спасибо

1 Ответ

0 голосов
/ 06 января 2010

Здесь все нормально. Я использую нечто подобное, единственное заметное отличие состоит в том, что я обычно передаю параметр «propertiesToLoad» конструктору DirectoryEntry, а также передаю фильтр конструктору DirectorySearcher.

Другое отличие состоит в том, что вы используете «имя пользователя» и «пароль» для DirectoryEntry - может быть, стоит использовать идентификатор пула приложений? Я обычно делаю SPSecurity.RunWithElevatedPrivileges(method pointer) для этих звонков.

...