0

Windows に付属の WinLDAP.DLL を使用して、異なる LDAP サーバー (1x OpenLDAP、1x Active Directory) に接続しています。プログラミング言語は Delphi ですが、ここではおそらく関係ありません。

いくつかの構成では、IP アドレスの代わりにサーバー名を使用すると、「ldap_connect」の呼び出しが非常に遅くなります (6 ~ 7 秒)。同じサーバーの ping または nslookup の作成は遅くありません。LDAP 接続でのみ遅いのはなぜですか? 問題を特定するために確認できることはありますか?

編集:WMwareは私のコンピューターに2つの仮想イーサネットアダプターをインストールしました。これらのアダプターを無効にすると、ldap_connect が 2 ~ 3 倍速くなります。問題を完全に解決するわけではありませんが、説明を見つけるのに役立つ場合があります。

4

3 に答える 3

1

それはほぼ間違いなく DNS の設定ミスです。nslookup と逆引きの時間を確認してください。

于 2012-12-10T11:52:58.843 に答える
1

LDAP サーバーがリバース DNS ルックアップを実行している可能性が高いです。

于 2012-12-10T15:52:24.560 に答える
0

IP アドレスの代わりにサーバー名を使用すると接続が遅くなる理由はまだわかりません。しかし、この問題を回避するために、WINLDAP.dll に IP アドレスを解決させるのではなく、自分で IP アドレスを解決することにしました。

次のような関数を使用して簡単に実現できます。

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;
于 2013-04-22T09:02:15.780 に答える