3

我一直在尝试解决如何在 System.DirectoryServices.Protocols 中取消长时间运行的 AD 搜索。任何人都可以帮忙吗?

我查看了 RootDSE 上的 supportControl/supportedCapabilities 属性,它们不包含 1.3.6.1.1.8 OID,所以我认为这意味着它不支持此处定义的 LDAP CANCEL 扩展操作:https://www。 rfc-editor.org/rfc/rfc3909

这留下了原始的 LDAP ABANDON 命令(请参阅此处的列表)。但似乎没有匹配的DirectoryRequest Class

有人有想法么?

4

3 回答 3

1

我想我找到了答案:当我阅读您的建议时,Martin,我遇到了 LdapConnection 类的Abort方法。我没想到会在那里找到它:从 LDAP 文档开始,我希望它只是另一个 LDAPMessage,但 MS 家伙似乎将它视为一种特殊情况。如果有人熟悉 LDAP 的非 MS 实现并且可以评论 MS 方法是否是典型的,我会很感激它以提高我的理解。

于 2009-08-15T08:45:11.310 回答
0

我认为,但我不肯定,没有取消的异步查询。它有一个 asynch 属性,但它允许填充集合,与取消无关。我能提供的最好的方法是将您的查询放在后台工作线程中,并放置一个异步回调,以便在它返回时处理答案。如果用户决定取消,您可以取消后台工作线程。即使在完成查询之前您还没有释放 ldap 服务器,您也会释放您的应用程序。您可以在http://www.c-sharpcorner.com/UploadFile/LivMic/BGWorker07032007000515AM/BGWorker.aspx找到有关后台工作线程的信息。 清理活动目录对象时不要忘记调用 .Dispose() 以防止内存泄漏。

于 2009-08-13T19:56:47.100 回答
0

如果查询也会产生很多数据,你可以通过分页放弃它们。在查询中指定一个PageResultRequestControl选项,给出一个相当小的页面大小(IIUC,1000 是默认页面大小)。IIUC,每次获得页面时都会发送新请求(将 cookie 从一个响应传递到下一个请求)。当您选择取消查询时,发送另一个预期结果为零的请求。

于 2009-08-14T16:38:20.290 回答