ldap - DirectoryEntry 实例未在 LDAP 中配置
问题描述
我不确定这是否是预期的行为,但我希望它会采取不同的行动。
运行以下代码后
using (var directoryEntry = new DirectoryEntry(
directoryPath,
ConfigurationManager.AppSettings["ldapUsername"],
ConfigurationManager.AppSettings["ldapPassword"],
AuthenticationTypes.Anonymous))
{
// ldap query
}
执行查询时,正如我所料,我可以在 LDAP 上看到一个活动会话。
在 LDAP 机器上运行以下命令:
netstat -nat | findstr my_ip_address | findstr :389
我可以在 LDAP 上看到一个活动会话:
TCP ldap_ip_address:389 my_ip_address:24730 ESTABLISHED InHost
但是当我们离开该using
部分并且DirectoryEntry
/DirectorySearcher
被处理时,我希望会话将被关闭。当我再次运行 netstat 命令时,我仍然可以看到相同的活动会话。
会话没有在 LDAP 中处理有什么原因吗?这是一个已知的问题?
解决方案
可能会发生两件事之一。
连接实际上是关闭的。第二次运行 netstat 时,如果连接状态显示
CLOSE_WAIT
或TIME_WAIT
而不是ESTABLISHED
,那么就是这种情况:连接确实关闭了。连接会在该状态下保持一段时间,以防该连接的某些数据包延迟到达。DirectoryEntry
是原生Windows Active Directory 服务接口(ADSI) 的包装器。它内置了一些每个进程的连接缓存。因此,如果您DirectoryEntry
的应用程序中有另一个使用相同连接的未处置,那么处置第二个DirectoryEntry
将不会关闭该连接。只要DirectoryEntry
您的应用程序中至少有一个未释放的连接,该连接就会保持打开状态。
推荐阅读
- angular - 在响应式表单中验证电子邮件和电话号码时面临问题
- c# - 如何使用 cmsSigner 在数字签名上添加时间戳
- python - 将数组与文件进行比较,并从数组的元素中形成组
- angular - apache http中的角度部署
- wpf - 每列中的 Listview(或 Datagrid)冻结累加器
- java - 从 Elasticsearch 索引中检索最小时间戳的最快方法是什么?
- go - 为什么通过 Context 共享状态仅适用于我的请求中间件?
- r - 提高传单的性能
- c++ - Visual Studio Release Build 生成需要 Microsoft.VC80.DebugCRT 的可执行文件
- linux - tar 退出代码 123 是否总是意味着空存档?