2014-01-17 3 views
5

При использовании System.DirecoryServices.DirectorySearcher, как вы можете определить, произошел ли ClientTimeOut или что поиск, естественно, возвратил пустой SearchResultCollection?Как определить ClientTimeout при использовании DirectorySearcher

дал следующий фрагмент

using (var searcher = new DirectorySearcher(adRoot)) 
         { 
          searcher.Filter = "SomeFilter"; 
          searcher.PropertiesToLoad.Add("givenname"); 
          searcher.PropertiesToLoad.Add("sn"); 
          searcher.PropertiesToLoad.Add("department"); 
          searcher.PropertiesToLoad.Add("samaccountname"); 
          searcher.ClientTimeout = TimeSpan.FromSeconds(10); 

          using (var results = searcher.FindAll()) 
          { 
           //haldle results        
          } 
         } 
        } 

ответ

6

Установка ClientTimeout полезна только при установке Asynchronous свойство истинной. Которых вы не делали. Документация для неуправляемого интерфейса IDirectorySearcher намного более подробно. От the MSDN article:

Предпочтительный лимит времени клиента полезен, когда клиент запрашивает асинхронный поиск. В асинхронном поиске клиент делает запрос, а затем переходит к другим задачам, ожидая, пока сервер вернет результаты. Возможно, сервер может выйти в автономный режим без уведомления клиента. В этом случае клиент не получит уведомления о том, продолжает ли сервер обрабатывать запрос, или если он больше не живет. Клиентское ограничение времени дает клиенту некоторый контроль над ситуациями, подобными этому.

Обратите внимание, что этот «некоторый контроль над ситуациями» менее совершенен, когда вы используете управляемые классы. Класс оболочки SearchResultCollection на самом деле не дает вам чистого способа поиска асинхронно, у него нет метода «BeginMoveNext» для повторения следующего результата. Угол «продолжается с другими задачами» довольно теоретический. Лучше не использовать это свойство.

+0

Спасибо за ваш ответ. ClientTimeout возникает, если поиск занимает более 10 секунд, даже если свойство Async не установлено. Если DirectorySearcher «прерывает» поиск из-за достижения клиента timeout, мы хотели бы повторить поиск против других контроллеров домена в сети. Кажется, один из контроллеров домена работает намного медленнее, чем остальные, и нам нужно «провалиться» на другой контроллер, если превышено десять секунд – flalar

Смежные вопросы