使用 IDirectorySearch 进行同步与异步搜索
使用 IDirectorySearch 接口执行搜索时,IDirectorySearch::ExecuteSearch 方法不会将搜索请求发送到服务器。 此方法仅保存搜索参数。 调用 IDirectorySearch::GetFirstRow 或 IDirectorySearch::GetNextRow 时,实际上会发送搜索请求。
对于 Active Directory 搜索,同步和异步之间的主要区别在于返回结果的第一行,即第一个 GetFirstRow 或 GetNextRow 调用返回的时间。
在同步搜索中,如果未启用分页,则当服务器构建并将整个结果集返回给客户端时,将返回第一行。 如果启用了分页,则在返回结果集的第一页时返回第一行。
在异步搜索中,如果未启用分页,则当服务器构建了结果集的第一行时,将返回第一行。 如果启用了分页,则在返回结果集的第一页时返回第一行。
默认搜索类型为同步搜索。 要指定异步搜索,请在传递给 IDirectorySearch::SetSearchPreference 方法的 ADS_SEARCHPREF_INFO 数组中,设置 ADS_SEARCHPREF_ASYNCHRONOUS 搜索选项,其中 ADSTYPE_BOOLEAN 值为 TRUE。 下面的代码示例对此操作进行了演示。
ADS_SEARCHPREF_INFO SearchPref;
SearchPref.dwSearchPref = ADS_SEARCHPREF_ASYNCHRONOUS;
SearchPref.vValue.dwType = ADSTYPE_BOOLEAN;
SearchPref.vValue.Boolean = TRUE;