我知道类似的问题被问了一百万遍。我已经阅读了它们,但仍然无法深入了解。我在我的代码(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的程序的计算机。
我想念什么?似乎必须非常简单。
最佳答案
我终于找到了。这确实很简单,并且由于是另一个项目而必须进行设置。我需要添加Mono.Security.dll及其引用。
关于c# - NullReferenceException ldapConnection.Connect,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15932675/