如何在使用DirectorySearcher时确定ClientTimeout

fla*_*lar 5 .net c# directoryservices adsi active-directory

使用System.DirecoryServices.DirectorySearcher时,如何确定ClientTimeOut是否已发生或搜索是否自然返回空的SearchResultCollection?

给出以下片段

 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                            
                            }
                        }
                    }
Run Code Online (Sandbox Code Playgroud)

Han*_*ant 6

设置ClientTimeout仅在将Asynchronous属性设置为true时才有用.你没做的.非托管IDirectorySearcher接口的文档更加详细.来自MSDN文章:

当客户端请求异步搜索时,客户端时间限制首选项很有用.在异步搜索中,客户端发出请求,然后在等待服务器返回结果时继续执行其他任务.服务器可能会在不通知客户端的情况下脱机.在这种情况下,客户端将不会通知服务器是否仍在处理查询,或者它是否不再存在.客户端时间限制首选项使客户端可以控制这种情况.

请注意,当您使用托管类时,这种"某种情况控制"并不完美.SearchResultCollection包装类实际上并没有为您提供一种干净的异步搜索方式,它没有"BeginMoveNext"方法来迭代下一个结果."继续其他任务"的角度是理论上的.最好不要使用该属性.