我知道类似的问题已经被问过一百万次了。我已经阅读了它们,但我仍然无法深入了解。我在我的代码(Winforms、c#)中使用 Novell.Directory.Ldap c# 库。它的工作方式与 microsoft ldap 库非常相似,但它也可以访问特定于 Novell eDirectory 的属性。
使用 Novell.Direcotry.Ldap;在那里。我还添加了引用并将其指向 Novell.Directory.Ldap.dll 文件。
string LDAPServerIP = "12.34.56.78";
string serverUserName = "cn=Rrunner,o=acme";
string serverPassword = "@nvi1";
LdapConnection ldapConn = new LdapConnection();
MessageBox.Show(ldapConn.ToString());
ldapConn.SecureSocketLayer = true;
ldapConn.Connect(LDAPServerIP, 636);
ldapConn.Bind(serverUserName, serverPassword);
当它到达 ldapConn.Connect() 方法时,我得到一个 NullReferenceException。在调试器中单步执行可以看到 ldapConn 对象,它是 Novell.Directory.Ldap.LdapConnection 对象,并且似乎分配了合理的值。例如,它确实将 SSL 设置为 true,并且在出现异常时,它甚至已经将 Host(string) 变量设置为 LDAPServerIP,并将 Port(int) 设置为 636,就像 ldapConn.Connect( ) 下令。鉴于此信息,我在该语句上放了一个 try/catch 以通过它,因为它无论如何都将属性放入。然后它还会在 Bind() 方法上获得异常,并且 bind 也确实将适当的值(userDN 和密码)放入对象中。
我直接从我使用/编写的另一个程序复制的那段代码,它工作得很好,所以我不知道为什么它不应该在这个程序中工作。唯一的区别是这是 Visual Studio 中的不同项目。
鉴于此,我尝试再次经历可能不同的事情,因为它是一个不同的项目:
我已尝试验证对提供的 Novell 的引用是否在项目中。我相当肯定这部分必须工作,因为内存中的对象是正确的类型并且有一堆我的程序没有告诉它的属性,所以它们必须来自那个 dll 文件。
SSL 证书存在于我的计算机上,.net 可以找到它,因为这是我开发成功连接到 LDAP 的程序的同一台计算机。
我错过了什么?似乎它必须是非常简单的东西。