相关疑难解决方法(0)

LDAP排序规则失败

我正在尝试对AD LDS进行ldap查询,以使用户对cn属性进行排序.排序顺序规则不应该是默认的英语,但它应该按照瑞典语排序.我正在使用.Net中的System.DirectoryServices.Protocols API执行此操作.

为了重现,我已经在端口389上安装了一个AD LDS实例,并安装了用户对象类.

使用以下代码(base是从执行简单搜索中复制的).订购规则已从此处获取.

public class LdapSorter
{

    public void SearchUsersSorted()
    {
        string hostOrDomainName = "localhost";
        string targetOu = "cn=Test";

        // create a search filter to find all objects
        string ldapSearchFilter = "(objectClass=user)";

        // establish a connection to the directory
        LdapConnection connection = new LdapConnection(hostOrDomainName);
        connection.SessionOptions.ProtocolVersion = 3;

        Console.WriteLine("\r\nPerforming a simple search ...");

        try
        {
            SearchRequest searchRequest = new SearchRequest
                                            (targetOu,
                                              ldapSearchFilter,
                                              SearchScope.OneLevel,
                                              null);

            searchRequest.Controls.Add(new SortRequestControl("cn", "1.2.840.113556.1.4.1594", false));
            //searchRequest.Controls.Add(new SortRequestControl("cn", false));
            //searchRequest.Controls.Add(new SortRequestControl("cn", true)); …
Run Code Online (Sandbox Code Playgroud)

.net ldap active-directory adlds

11
推荐指数
1
解决办法
395
查看次数

分页AD查询有时会失败

我有一些代码(下面)每15分钟运行一次.有时它将无法使用以下错误查询AD:

System.DirectoryServices.Protocols.DirectoryOperationException: The server does not support the control. The control is critical.
   at System.DirectoryServices.Protocols.LdapConnection.SendRequest(DirectoryRequest request, TimeSpan requestTimeout)
Run Code Online (Sandbox Code Playgroud)
  • 当它成功运行时,整个过程大约需要一分钟才能运行,AD查询大约需要30秒,共32页.
  • 当它失败时,它始终在第一页上.
  • 据我所知,它似乎没有在一个模式中失败(总是在一天的不同时间).

在谷歌搜索该错误后,我发现了两个SO问题(,),指向AuthType.Ntlm用于解决问题.但这对我来说并没有解决.另一个人说要检查服务器是否支持分页(确实如此).

关于为什么会发生这种情况的任何想法?

var attributesToReturn = new[] {
    "givenName",
    "sn",
    "middleName",
    "extensionAttribute8",
    "department",
    "sAMAccountName",
    "userAccountControl"
};
var filter = "(&(objectclass=user)(!(objectclass=computer))(sn=*)(givenName=*)(extensionAttribute8=*)(|(sn=a*)(sn=b*)(sn=c*)(sn=d*)(sn=e*)(sn=f*)(sn=g*)(sn=h*)(sn=i*)(sn=j*)(sn=k*)(sn=l*)(sn=m*)(sn=n*)(sn=o*)(sn=p*)(sn=q*)(sn=r*)(sn=s*)(sn=t*)(sn=u*)(sn=v*)(sn=w*)(sn=x*)(sn=y*)(sn=z*)))";
var currentBatch = 1;
var searchRequest = new SearchRequest("DC=foo,DC=bar,DC=baz", filter, SearchScope.Subtree, attributesToReturn);
var pageRequestControl = new PageResultRequestControl(500);
searchRequest.Controls.Add(pageRequestControl);

using (var ldapConnection = new LdapConnection("server.foo.bar.baz"))
{
    ldapConnection.Credential = new NetworkCredential("user", "pass", …
Run Code Online (Sandbox Code Playgroud)

c# active-directory

7
推荐指数
1
解决办法
293
查看次数

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万
查看次数

iPlanet LDAP和C#PageResultRequestControl

我正在尝试在iPlanet LDAP上进行分页搜索.这是我的代码:

LdapConnection ldap = new LdapConnection("foo.bar.com:389");
ldap.AuthType = AuthType.Anonymous;
ldap.SessionOptions.ProtocolVersion = 3;
PageResultRequestControl prc = new PageResultRequestControl(1000);
string[] param = new string[] { "givenName" };
SearchRequest req = new SearchRequest("ou=people,dc=bar,dc=com", "(ou=MyDivision)", SearchScope.Subtree, param);
req.Controls.Add(prc);
while (true)
{
    SearchResponse sr = (SearchResponse)ldap.SendRequest(req);
    ... snip ...
}
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我得到一个异常,指出"服务器不支持控件.控件是关键的"在剪辑之前的行上.快速谷歌搜索没有任何结果.iPlanet是否支持分页?如果是这样,我做错了什么?谢谢.

c# ldap

4
推荐指数
1
解决办法
3368
查看次数

标签 统计

c# ×3

ldap ×3

.net ×2

active-directory ×2

adlds ×1