Share via


Pesquisas síncronas e assíncronas com IDirectorySearch

Quando você executa uma pesquisa usando a interface IDirectorySearch, o método IDirectorySearch::ExecuteSearch não envia a solicitação de pesquisa para o servidor. Esse método salva apenas os parâmetros de pesquisa. A solicitação de pesquisa é realmente enviada quando você chama IDirectorySearch::GetFirstRow ou IDirectorySearch::GetNextRow.

Para pesquisas do Active Directory, a principal diferença entre síncrono e assíncrono é quando a primeira linha do resultado é retornada, ou seja, quando a primeira chamada GetFirstRow ou GetNextRow retorna.

Em uma pesquisa síncrona, se a paginação não estiver habilitada, a primeira linha será retornada quando o servidor tiver construído e retornado todo o conjunto de resultados para o cliente. Se a paginação estiver habilitada, a primeira linha será retornada quando a primeira página do conjunto de resultados for retornada.

Em uma pesquisa assíncrona, se a paginação não estiver habilitada, a primeira linha será retornada quando o servidor tiver construído a primeira linha do conjunto de resultados. Se a paginação estiver habilitada, a primeira linha será retornada quando a primeira página do conjunto de resultados for retornada.

O tipo de pesquisa padrão é síncrono. Para especificar uma pesquisa assíncrona, defina uma opção de pesquisa ADS_SEARCHPREF_ASYNCHRONOUS com um valor ADSTYPE_BOOLEAN TRUE na matriz ADS_SEARCHPREF_INFO passada para o método IDirectorySearch::SetSearchPreference . Essa operação é mostrada no exemplo de código a seguir.

ADS_SEARCHPREF_INFO SearchPref;
SearchPref.dwSearchPref = ADS_SEARCHPREF_ASYNCHRONOUS;
SearchPref.vValue.dwType = ADSTYPE_BOOLEAN;
SearchPref.vValue.Boolean = TRUE;