我正在尝试从两个不同的来源收集数据:AD 域和 LDAP 服务器。
下面是我正在使用的代码:
switch (dir)
{
case 0:
searchFilter = String.Format("(&(objectClass=user)(employeeID={0}))", lineData[34]);
attr = new string[] { "sn", "givenName", "l", "employeeid", "sAMAccountName" };
uid_ATTR = "sAMAccountName";
eid_ATTR = "EmployeeID";
dirName = "AD";
sr = new SearchRequest(adBaseDN, searchFilter, System.DirectoryServices.Protocols.SearchScope.Subtree, attr);
break;
case 1:
searchFilter = String.Format("(employeeNumber={0})", lineData[34]);
attr = new string[] { "sn", "givenName", "uid", "l", "employeeNumber" };
uid_ATTR = "uid";
eid_ATTR = "employeeNumber";
dirName = "LDAP";
sr = new SearchRequest(ldapBaseDN, searchFilter, System.DirectoryServices.Protocols.SearchScope.Subtree, attr);
break;
default:
WriteLog("Incorrect call to CompareDirectory(). Appropriate values are 0 or 1");
return;
}
try
{
if (dir == 0) { result = adConx.SendRequest(sr) as SearchResponse; }
else { result = ldapConx.SendRequest(sr) as SearchResponse; }
if (result != null)
{ .... etc.
LDAP 搜索非常快,只需几毫秒即可返回结果。但是,AD 搜索非常慢,需要 5 到 11 秒才能返回结果。
在这一点上,我不确定这是我的过滤器的问题,还是 AD 的问题。一个快速的 Wireshark 跟踪显示如下,看起来像一个超时:
我愿意接受任何建议。
提前致谢!
编辑: 我决定通过使用 localhost:389 作为 LDAP 连接地址直接在域控制器上运行代码来进一步测试这一步骤。代码仍然需要大约 8-10 秒才能返回响应。这实际上可能是 AD 问题,而不是代码问题。