Delphi 为什么ldap_连接速度慢?

Delphi 为什么ldap_连接速度慢?,delphi,ldap,Delphi,Ldap,我正在使用Windows附带的WinLDAP.DLL连接到不同的LDAP服务器(1x OpenLDAP,1x Active Directory)。编程语言是Delphi,但可能与此无关 在一些配置中,当使用服务器名称而不是IP地址时,“ldap_connect”的调用非常慢(6-7秒)。对同一服务器进行ping或nslookup并不慢。为什么ldap连接的速度很慢?我是否可以检查一些东西来确定问题 编辑:WMware在我的计算机上安装了2个虚拟以太网适配器。如果我取消激活这些适配器,ldap_c

我正在使用Windows附带的WinLDAP.DLL连接到不同的LDAP服务器(1x OpenLDAP,1x Active Directory)。编程语言是Delphi,但可能与此无关

在一些配置中,当使用服务器名称而不是IP地址时,“ldap_connect”的调用非常慢(6-7秒)。对同一服务器进行ping或nslookup并不慢。为什么ldap连接的速度很慢?我是否可以检查一些东西来确定问题


编辑:WMware在我的计算机上安装了2个虚拟以太网适配器。如果我取消激活这些适配器,ldap_connect会快2-3倍。这并不能完全解决问题,但可能有助于找到解释。

这几乎肯定是DNS配置错误。检查您的nslookup和反向查找时间。

LDAP服务器很有可能正在执行一个任务。

我仍然不知道,如果我使用服务器名称而不是IP地址,为什么连接会很慢。但是为了解决这个问题,我决定自己解决这个IP地址,而不是让WINLDAP.dll来解决

它可以通过使用如下函数简单地实现:

function GetIPAddress(const HostName: AnsiString): AnsiString;
var
  HostEnt: PHostEnt;
  Host: AnsiString;
  SockAddr: TSockAddrIn;
begin
  Result := '';
  Host := HostName;
  if Host = '' then
  begin
    SetLength(Host, MAX_PATH);
    GetHostName(PAnsiChar(Host), MAX_PATH);
  end;
  HostEnt := GetHostByName(PAnsiChar(Host));
  if HostEnt <> nil then
  begin
    SockAddr.sin_addr.S_addr := Longint(PLongint(HostEnt^.h_addr_list^)^);
    Result := inet_ntoa(SockAddr.sin_addr);
  end;
end;
函数GetIPAddress(const主机名:AnsiString):AnsiString;
变量
主持人:光能;
主持人:AnsiString;
SockAddr:TSockAddrIn;
开始
结果:='';
主机:=主机名;
如果主机='',则
开始
SetLength(主机,最大路径);
GetHostName(PAnsiChar(主机),最大路径);
结束;
HostEnt:=GetHostByName(PAnsiChar(主机));
如果没有,那么
开始
SockAddr.sin_addr.S_addr:=Longint(PLongint(HostEnt^.h_addr_list^));
结果:=inet_ntoa(SockAddr.sin_addr);
结束;
结束;

谢谢您的回答,但nslookup请求总是很快的。到目前为止,我只看到ldap连接的问题。您能告诉我们您的“连接字符串”是什么吗?例如,您是进行无服务器绑定(domain.lab)还是指定域控制器的名称?或者,最好至少向我们展示程序的ldap\u bind/ldap\u init/ldap\u connect部分。此外,您的开发计算机是否已加入AD域?此外,您在连接到LDAP服务器时是否使用Netbios或DNS名称?您可以通过执行两个wireshark/tcpdump跟踪来验证延迟,一个在您的计算机上,另一个在LDAP服务器上。名称:一些反馈很好:)@iPath:My dev machine in在AD域上。我在其他系统(不是所有系统)上也有这个问题,不仅仅是AD服务器,所以我不认为这是AD特有的。我认为它可能来自LDAP协议(或WinLDAP中的实现)。我使用的是LDAP服务器的Netbios名称。谢谢,这可能是nslookup快而LDAP慢的一个解释。我会看看链接中的建议。但是,由于我在OpenLDAP和AD服务器上也有同样的问题,问题可能不在服务器端,而是在客户端(但我不知道可能是什么…)