如何知道我的DirectoryEntry是否真的连接到我的LDAP目录?

Kse*_*pac 8 c# ldap active-directory directoryentry

我正在连接到C#中的LDAP目录,所以我使用了DirectoryEntry类.

当您使用地址,登录名和密码执行"new DirectoryEntry"时,它应该连接到LDAP目录.

但是,即使连接不起作用,它也会返回没有问题,并且设置了directoryentry变量.

所以我知道我的连接真的开了吗?现在,我正在使用一个非常非常丑陋的黑客:我放了一个"if(mydirectory.SchemaEntry)",如果没有建立连接会产生异常,因为DirectoryEntry的某些成员,例如SchemaEntry,不是如果连接失败,则设置.但是1:在丑陋的等级2上必须是11/10:在失败之前需要花费很多时间.

那么这样做的好方法是什么?当然,微软必须提供一些东西(即使我使用的是LDAP目录而不是Active Directory)来了解我是否真的已经连接了?

mar*_*c_s 12

只需"新建"DirectoryEntry就不会创建与LDAP存储的连接.

只有在您开始使用其属性或.NativeObject显式访问该属性时,您才会实际获得与LDAP存储的连接.

为了确保你已经连接,只需(DirectoryEntry).NativeObject在try ... catch子句中读出- 如果它被炸弹,你就会遇到问题,否则你的连接现在已经启动并处于活动状态.

不幸的是,据我所知,没有任何属性或方法可以调用以确定您是否已使用DirectoryEntry成功连接到LDAP.


Kse*_*pac 1

好吧,marc_s 的解决方案大约是我正在做的事情(除了我正在寻找 SchemaEntry 而不是 NativeObject)。但超时延迟太长(运行查询来填充表单的自动完成值)。我想我实际上更喜欢假装连接已打开并让查询运行。这样,我可以设置自己的较小的超时延迟。