0

AD ドメインと LDAP サーバーの 2 つの別々のソースからデータを収集しようとしています。

以下は私が使用しているコードです:

            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 のクイック トレースは次のように表示され、タイムアウトのように見えます。

Wireshark トレース 私はどんな提案にもオープンです。

前もって感謝します!

編集: LDAP 接続アドレスとして localhost:389 を使用して、ドメイン コントローラーでコードを直接実行することにより、これをさらに 1 ステップテストすることにしました。コードが応答を返すまでに、まだ約 8 ~ 10 秒かかります。これは実際には AD の問題であり、コードの問題ではない可能性があります。

4

1 に答える 1

0

これは、Active Directory 内の非常に不適切な設計の OU 構造に関連していました。

于 2013-08-20T18:48:42.203 に答える