0

我正在尝试连接到 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
4

2 回答 2

3

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

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

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

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

于 2012-05-16T01:09:34.963 回答
0

在目录搜索中使用Autheticationtype.None它会起作用。

DirectorySearcher search = new DirectorySearcher(
new DirectoryEntry("LDAP://XXX.XX.XX.XX:","","",AuthenticationTypes.None));
于 2017-08-18T06:07:19.003 回答