Как отказаться от длительного поиска в System.DirectoryServices.Protocols - PullRequest
3 голосов
/ 05 августа 2009

Я пытался выяснить, как отменить длительный поиск AD в System.DirectoryServices.Protocols. Кто-нибудь может помочь?

Я посмотрел на атрибуты supportControl / supportCapabilities в RootDSE, и они не содержат OID 1.3.6.1.1.8, поэтому я думаю, это означает, что он не поддерживает расширенную операцию LDAP CANCEL, как определено здесь: http://tools.ietf.org/html/rfc3909

Это оставляет оригинальную команду LDAP ABANDON (см. здесь для списка). Но, похоже, нет соответствующего класса DirectoryRequest .

У кого-нибудь есть идеи?

Ответы [ 3 ]

1 голос
/ 15 августа 2009

Мне кажется, я нашел свой ответ: пока я читал вокруг твоего предложения, Мартин, я наткнулся на метод Abort в классе LdapConnection. Я не ожидал найти его там: исходя из документации по LDAP, я ожидал найти его как еще одно сообщение LDAP, но парни из MS, похоже, восприняли это как особый случай. Если кто-то знаком с реализацией LDAP без MS и может прокомментировать, является ли подход MS типичным, я был бы признателен за улучшение моего понимания.

0 голосов
/ 14 августа 2009

Если запрос также выдаст много данных, вы можете отказаться от них через paging . Укажите в запросе параметр PageResultRequestControl , предоставляющий довольно низкий размер страницы (IIUC, 1000 - размер страницы по умолчанию). IIUC, вы будете отправлять новые запросы каждый раз, когда получаете страницу (передавая файлы cookie из одного ответа в следующий запрос). Когда вы решите отменить запрос, отправьте другой запрос с нулевым ожидаемым результатом.

0 голосов
/ 13 августа 2009

Я думаю, но я не уверен, что нет асинхронного запроса с отменой. У него есть асинхронное свойство, но оно позволяет заполнять коллекцию, ничего не отменяя. Лучшее, что я могу предложить, - поместить ваш запрос в фоновый рабочий поток и создать асинхронный обратный вызов, который будет иметь дело с ответом, когда он вернется. Если пользователь решает отменить, вы можете просто отменить фоновый рабочий поток. Вы освободите свое приложение, даже если вы не освободили сервер ldap до тех пор, пока он не завершит свой запрос. Информацию о фоновых рабочих потоках можно найти по адресу http://www.c -sharpcorner.com / UploadFile / LivMic / BGWorker07032007000515AM / BGWorker.aspx Не забывайте вызывать .Dispose () при очистке объектов вашего активного каталога для предотвращения утечек памяти.

...