Я пытаюсь сделать Поиск LDAP однако, я продолжаю получать следующую ошибку:
Unhandled Exception: System.Runtime.InteropServices.COMException (0x80072024): T
he administrative limit for this request was exceeded.
at System.DirectoryServices.SearchResultCollection.ResultsEnumerator.MoveNext
()
at System.DirectoryServices.DirectorySearcher.FindOne()
Вот код: (Ошибка брошена в FindOne ()),
DirectoryEntry dirEntry = new DirectoryEntry("LDAP://myldap.com:1701/ou=People,o=My Company,c=CA", "", "", AuthenticationTypes.Anonymous);
DirectorySearcher dirSearcher = new DirectorySearcher(dirEntry);
string filter = "mail";
string filterValue = "my.email@mycompany.com";
dirSearcher.Filter = string.Format("({0}={1})", filter, filterValue);
SortOption sortOption = new SortOption(filter, SortDirection.Ascending);
dirSearcher.Sort = sortOption;
dirSearcher.PropertiesToLoad.Add("uid");
dirSearcher.SearchScope = SearchScope.Subtree;
SearchResult result = dirSearcher.FindOne();
DirectoryEntry directEntry = result.GetDirectoryEntry();
Console.WriteLine("Result: {0}", directEntry.Properties["uid"].Value.ToString());
Какие-либо идеи, как обойти это?
Убрал эту строку и все работает:
dirSearcher.PropertiesToLoad.Add("uid");
Должно быть, UID берется из каждого результата, а не только из совпадающего результата, и поэтому превышается лимит администратора.
Многие реализации LDAP серверов имеют ограничения на количество результатов, возвращаемых в запросе.
В AD по умолчанию 1000 или 2000. Я забыл. eDirectory по умолчанию не имеет ограничений. Другие варьируются.
Вы можете либо попросить администраторов изменить лимит, либо изменить свой код так, чтобы он получал только страницу (или ограниченное количество результатов) за раз.