【问题标题】:DirectorySearcher FindOne() delay on initial executionDirectorySearcher FindOne() 初始执行延迟
【发布时间】:2012-11-15 21:58:29
【问题描述】:

我看到在执行 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");
            }
        }
    }
}

【问题讨论】:

标签: c# ldap directoryservices


【解决方案1】:

根据LDAP ADsPath MSDN article,如果您的绑定LDAP 路径指向服务器,您应该指定ServerBind 标志以避免不必要的网络流量。它还建议提供服务器的完整 DNS 名称。此外,ReadonlyServer 标志在指向服务器时毫无意义。所以我的第一个建议是用ServerBind 替换ReadonlyServer 标志(最好给出完整的DNS 名称),或者删除字符串的服务器部分(在你的例子中,让它成为LDAP://ou=lab,dc =ourdomain,dc=com 或 LDAP://ourdomain.com/ou=lab,dc=ourdomain,dc=com)。

要查看的另一件事是您通过专有名称提供用户名。如果您查看 DirectoryEntry 使用的核心 API IADsOpenDSObject::OpenDSObject,它要求 lpReserved 标志 [DirectoryEntry 中的 AuthenticationTypes 参数] 为零 [None] 或在传递 aDS_USE_SSL [SecureSocketsLayer] 标志时包含用户名的专有名称。请注意,SecureSocketsLayer 标志要求 Active Directory 需要安装证书服务器才能使用此标志。您可能希望以不同的格式传递用户名。

最后,this MDSN page 表示没有任何身份验证标志,用户名和密码以明文形式发送。您应该添加 Secure 标志。

【讨论】:

  • 谢谢!将 AuthenticationType 从 ReadOnlyServer 更改为 ServerBind 将整个持续时间从 15 秒减少到 2 秒。
猜你喜欢
  • 2020-05-10
  • 1970-01-01
  • 2022-01-24
  • 2011-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-08
  • 2017-11-11
相关资源
最近更新 更多