NullReferenceException ldapConnection.Connect

时间:2013-04-10 17:37:14

标签: c# ldap nullreferenceexception novell edirectory

我知道类似的问题已被问过一百万次。我读过它们,但仍然无法深究这一点。我在我的代码中使用了Novell.Directory.Ldap c#库(Winforms,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(字符串)变量设置为LDAPServerIP,并且Port(int)设置为636,就像ldapConn.Connect一样(订购。鉴于这些信息,我在这个语句中放了一个try / catch来通过它,因为它无论如何都要放置属性。然后它也将在Bind()方法上获得异常,并且bind也将适当的值(userDN和密码)放入对象中。

我直接从我使用/写入的另一个程序中复制的代码部分,它完全正常,所以我不知道它为什么不能在这个程序中工作。唯一的区别是这是Visual Studio中的一个不同的项目。

考虑到这一点,我已经尝试过再次讨论可能不同的事情,因为它是一个不同的项目:

我已经尝试验证提供的Novell引用是否在项目中。我相当肯定该部分必须正常工作,因为内存中的对象具有正确的类型,并且具有我的程序没有告诉它的一堆属性,因此它们必须来自该dll文件。

我的计算机上存在SSL证书.net可以找到它,因为这与我开发成功连接到LDAP的程序的计算机相同。

我在想什么?看起来它必须非常简单。

1 个答案:

答案 0 :(得分:2)

我终于找到了。这是非常简单的事情,并且由于是一个不同的项目而必须设置的东西。我需要添加Mono.Security.dll及其引用。