6

DirectorySearcher FindOne() を実行してから、最初のネットワーク パケットが LDAP サーバーに送信されるまでに 2 ~ 5 秒の初期遅延が見られます。最初の実行後、後続の実行は約 45 秒間即座に完了します。その期間の高速実行の後、次の実行は遅延され、その後のすべての実行は即座に完了します。ある種のキャッシングが行われているようですが、それを確認したり、初期遅延の原因を説明したりするリソースを見つけることができませんでした.

クライアントの Windows 2008 サーバーでこれに気付き、自社の Windows 2008 および Windows 7 ボックスで再現しました。

私の単純な .NET 4.0 C# アプリは次のようになります。「Started」メッセージと「Finished」メッセージの間で遅延が発生します。

この遅延が最初の FindOne() 実行で発生する理由は何ですか? どんな助けでも大歓迎です!

using System;
using System.Collections.Generic;
using System.Text;

using System.DirectoryServices;

namespace LdapTest
{
class Program
{
    static void Main(string[] args)
    {
        string[] fetchAttributes;
        fetchAttributes = new string[] { "{string[0]}" };

        using (DirectoryEntry searchRoot = new DirectoryEntry("LDAP://localserver/ou=lab,dc=ourdomain,dc=com", "cn=binduser,ou=Services,dc=ourdomain,dc=com", "Password", AuthenticationTypes.ReadonlyServer))
        {
            using (DirectorySearcher searcher = new DirectorySearcher(searchRoot, "(sAMAccountName=UserName)", fetchAttributes, SearchScope.Subtree))
            {
                Console.WriteLine("Started");
                SearchResult result = searcher.FindOne();
                Console.WriteLine("Finished");
            }
        }
    }
}
4

1 に答える 1

3

LDAP ADsPath MSDN 記事によると、ServerBind不要なネットワーク トラフィックを回避するために、バインディング LDAP パスがサーバーを指している場合はフラグを指定する必要があります。また、サーバーの完全な DNS 名を指定することもお勧めします。さらにReadonlyServer、サーバーを指している場合、フラグは無意味です。ReadonlyServerしたがって、私の最初の提案は、フラグを置き換えるServerBind(およびできれば完全な DNS 名を指定する) か、文字列のサーバー部分を削除することです (この例では、LDAP://ou=lab,dc=ourdomain,dc=com にします)。または LDAP://ourdomain.com/ou=lab,dc=ourdomain,dc=com)。

他に確認すべきことは、ユーザー名を識別名で提供していることです。DirectoryEntry が使用するコア API IADsOpenDSObject::OpenDSObjectを見ると、lpReserved フラグ [ AuthenticationTypesDirectoryEntry のパラメータ] がゼロ [ ] であるか、ユーザー名の識別名を渡すときにNoneADS_USE_SSL [ ] フラグが含まれている必要があります。このフラグを使用するには、このフラグを使用する前に、Active Directory に証明書サーバーがインストールされている必要があることSecureSocketsLayerに注意してください。SecureSocketsLayerユーザー名を別の形式で渡したい場合があります。

最後に、この MDSN ページには、認証フラグがないと、ユーザー名とパスワードがクリアテキストで送信されることが示されています。Secureフラグを追加する必要があります。

于 2012-11-26T14:24:35.970 に答える