C#Domino LDAP查询

C#Domino LDAP查询,c#,ldap,lotus-domino,C#,Ldap,Lotus Domino,我正在尝试连接到Domino服务器以获取所有用户信息(姓名、电子邮件等)。当我尝试运行下面的代码时,出现以下错误:{“出现协议错误。\r\n”} 我环顾四周,在ldap浏览器中尝试了相同的查询,结果都很好。任何建议都将不胜感激 DirectorySearcher search = new DirectorySearcher(new DirectoryEntry("LDAP://server:port")); try { search.F

我正在尝试连接到Domino服务器以获取所有用户信息(姓名、电子邮件等)。当我尝试运行下面的代码时,出现以下错误:{“出现协议错误。\r\n”}

我环顾四周,在ldap浏览器中尝试了相同的查询,结果都很好。任何建议都将不胜感激

DirectorySearcher search = new DirectorySearcher(new DirectoryEntry("LDAP://server:port"));

        try
        {

            search.Filter = "(objectClass=dominoPerson)";
            search.PropertiesToLoad.Add("cn");
            SearchResultCollection results = search.FindAll();

            foreach (SearchResult r in results)
            {
                DirectoryEntry de = r.GetDirectoryEntry();

                foreach (DirectoryEntry child in de.Children)
                {
                    Console.WriteLine(child.Name);
                }
            }

            search.Dispose();

        }
        catch (Exception msg)
        {
            Console.WriteLine(msg.ToString());
        }v

您是否正在使用ldap浏览器进行身份验证,但正在从代码执行未经验证的查询?根据配置设置,Domino可能会完全拒绝未经验证的查询,或者限制它将返回的属性。另外,您是否在ldap浏览器连接中指定BaseDN,而不是在代码中指定

不过,我建议在服务器端收集尽可能多的信息,而不仅仅是猜测。例如,在Domino服务器上设置调试日志记录,以捕获有关LDAP连接和请求的信息。使用server命令设置config LDAPDEBUG=7,然后重新启动ldap任务。(您可以先将其设置为3,以减少详细的输出,但我想您最好直接进入信息的最高级别。)

设置好后,使用ldap浏览器进行查询,并观察Domino服务器的控制台。(如果它滚动出可见窗口,您应该能够在服务器上的IBM技术支持文件夹中找到日志信息。)接下来,输入一个服务器命令(例如“show server”),作为一个容易看到的分隔符,然后运行代码并查看控制台日志


此时,您应该能够将ldap浏览器连接和查询中的控制台日志条目与代码连接和查询中的条目进行比较。这些差异将引导您找到解决方案

您是否正在使用ldap浏览器进行身份验证,但正在使用代码执行未经身份验证的查询?根据配置设置,Domino可能会完全拒绝未经验证的查询,或者限制它将返回的属性。另外,您是否在ldap浏览器连接中指定BaseDN,而不是在代码中指定

不过,我建议在服务器端收集尽可能多的信息,而不仅仅是猜测。例如,在Domino服务器上设置调试日志记录,以捕获有关LDAP连接和请求的信息。使用server命令设置config LDAPDEBUG=7,然后重新启动ldap任务。(您可以先将其设置为3,以减少详细的输出,但我想您最好直接进入信息的最高级别。)

设置好后,使用ldap浏览器进行查询,并观察Domino服务器的控制台。(如果它滚动出可见窗口,您应该能够在服务器上的IBM技术支持文件夹中找到日志信息。)接下来,输入一个服务器命令(例如“show server”),作为一个容易看到的分隔符,然后运行代码并查看控制台日志


此时,您应该能够将ldap浏览器连接和查询中的控制台日志条目与代码连接和查询中的条目进行比较。这些差异将引导您找到解决方案

在目录搜索中使用
authenticationtype.None
,它可以工作

DirectorySearcher search = new DirectorySearcher(
new DirectoryEntry("LDAP://XXX.XX.XX.XX:","","",AuthenticationTypes.None));

在目录搜索中使用
authenticationtype.None
,它就可以工作了

DirectorySearcher search = new DirectorySearcher(
new DirectoryEntry("LDAP://XXX.XX.XX.XX:","","",AuthenticationTypes.None));

异常在哪一行抛出?你真的得到了搜索结果吗?我还尝试删除“PropertiesToLoad”行,以防Domino内部实际上没有该属性;是否存在内部异常?我想这可能发生在连接上。在Console.WriteLine语句的调试器中放置一个断点,并检查异常对象。异常抛出在哪一行?你真的得到了搜索结果吗?我还尝试删除“PropertiesToLoad”行,以防Domino内部实际上没有该属性;是否存在内部异常?我想这可能发生在连接上。在Console.WriteLine语句的调试器中放置断点,并检查异常对象。