我一直在努力研究如何在System.DirectoryServices.Protocols中取消长时间运行的AD搜索。有人可以帮忙吗?
我查看了RootDSE上的supportControl / supportedCapabilities属性,它们不包含1.3.6.1.1.8 OID,所以我认为这意味着它不支持此处定义的LDAP CANCEL扩展操作:{{3 }}
保留原始LDAP ABANDON命令(请参阅http://tools.ietf.org/html/rfc3909以获取列表)。但似乎没有匹配的here。
有人有什么想法吗?
答案 0 :(得分:1)
我想我找到了答案:当我在阅读你的建议时,Martin,我在LdapConnection课上遇到了Abort方法。我没想到会在那里找到它:从LDAP文档开始我希望它只是另一个LDAPMessage,但MS人员似乎把它视为一个特例。如果有人熟悉LDAP的非MS实现并且可以评论MS方法是否典型,我会很感激它来提高我的理解。
答案 1 :(得分:0)
我想,但我不是肯定的,没有取消的异步查询。它有一个异步属性,但它允许填充集合,与取消无关。我能提供的最好的方法是将您的查询放在后台工作线程中,并设置一个异步回调函数,以便在它返回时处理答案。如果用户决定取消,您只需取消后台工作线程即可。你将释放你的应用程序,即使你没有释放ldap服务器,直到它完成它的查询。您可以在http://www.c-sharpcorner.com/UploadFile/LivMic/BGWorker07032007000515AM/BGWorker.aspx找到有关后台工作线程的信息 在清理活动目录对象时,不要忘记调用.Dispose()以防止内存泄漏。
答案 2 :(得分:0)
如果查询也会生成许多数据,您可以通过paging放弃它们。在查询中指定PageResultRequestControl选项,页面大小相当低(IIUC,1000是默认页面大小)。 IIUC,您每次获得页面时都会发送新请求(将Cookie从一个响应传递到下一个请求)。当您选择取消查询时,请发送另一个预期结果为零的请求。