相关疑难解决方法(0)

DirectorySearcher FindOne()在初始执行时延迟

我看到执行DirectorySearcher FindOne()和我看到的第一个网络数据包之间的初始延迟时间为2-5秒.初始执​​行后,后续执行立即完成约45秒.在快速执行的这段时间之后,下一次执行将被延迟,并且所有后续执行将立即完成.似乎有某种缓存正在进行,但我无法找到任何确认或描述导致初始延迟的资源.

我们在客户端Windows 2008服务器上注意到了这一点,然后在我们自己的Windows 2008和Windows 7盒子上重现.

这是我简单的.NET 4.0 C#应用程序的样子.延迟发生在"已启动"和"已完成"消息之间.

知道为什么在最初的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");
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

c# directoryservices ldap

6
推荐指数
1
解决办法
2626
查看次数

LdapConnection SearchRequest抛出"超出大小限制"的异常

由于我们需要使用LDAPS连接到LDAP服务器,因此我们必须使用LdapConnection而不是DirectoryEntry.

这是源代码:

        SearchResponse response;
        using (LdapConnection con = new LdapConnection(new LdapDirectoryIdentifier(Host, Port)))
        {
            if (IsSSL)
            {
                con.SessionOptions.SecureSocketLayer = true;
                con.SessionOptions.VerifyServerCertificate =
                    (connection, certificate)
                    => true;
            }
            con.Credential = new NetworkCredential(_username, _password);
            con.AuthType = AuthType.Basic;
            con.Bind();

            if (logMessage != null)
                logMessage("Connected to LDAP");

            string sFilter = String.Format(
                "(&(objectcategory=person)(objectclass=user){0}(!(userAccountControl:1.2.840.113556.1.4.803:=2)))",
                filter
                );

            SearchRequest request = new SearchRequest("OU=Corp,DC=mydc,DC=com", sFilter, SearchScope.Subtree);
            request.Attributes.Add(Resources.objectguid);
            request.Attributes.Add(Resources.givenname);
            request.Attributes.Add(Resources.sn);
            request.Attributes.Add(Resources.initials);
            request.Attributes.Add(Resources.samaccountname);
            request.Attributes.Add(Resources.userprincipalname);
            request.Attributes.Add(Resources.mail);
            request.Attributes.Add(Resources.objectsid);
            request.Attributes.Add(Resources.department);
            request.Attributes.Add(Resources.company);
            request.SizeLimit = 10;

            response = (SearchResponse) con.SendRequest(request);
        }
Run Code Online (Sandbox Code Playgroud)

执行源代码(我们使用外部第三方软件验证了凭据,主机,端口等)后,我们得到以下异常:

超出了大小限制

描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.

异常详细信息: System.DirectoryServices.Protocols.DirectoryOperationException:超出了大小限制 …

.net c# ldap

6
推荐指数
2
解决办法
1万
查看次数

标签 统计

c# ×2

ldap ×2

.net ×1

directoryservices ×1