2013-04-10 67 views
2

我知道类似的问题已经被问了一百万次。我读过它们,但我仍然无法深究。我在我的代码中使用Novell.Directory.Ldap c#库(Winforms,c#)。它与Microsoft ldap库非常相似,但它也可以访问特定于Novell eDirectory的属性。NullReferenceException ldapConnection.Connect

using 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); 

我得到一个NullReferenceException当它到达ldapConn.Connect()方法。 在调试器中单步执行可以看到ldapConn对象,它是一个Novell.Directory.Ldap.LdapConnection对象,似乎具有分配给它的合理值。例如,它将SSL设置为true,并且在例外情况下,它甚至已经将Host(string)变量设置为LDAPServerIP,将Port(int)设置为636,就像ldapConn.Connect( )下令。考虑到这些信息,我把try/catch放在那个语句上,以便通过它,因为它总是把属性放在里面。然后它也会在Bind()方法上得到异常,并且bind也会将适当的值(userDN和password)放入对象中。

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

鉴于这种情况,我已经试过经历的事情再次,可能是不同的,因为它是一个不同的项目:

我试过验证的参考Novell提供的项目。我相当肯定,部分必须工作,因为内存中的对象是正确的类型,并有一堆属​​性,我的程序没有告诉它,所以他们必须来自该dll文件。

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

我在误解什么?看来它必须是非常简单的东西。

+0

可能重复[什么是NullReferenceException,我该如何解决它?](http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-doi-i-fix-它) – Nasreddine 2015-10-04 09:07:46

回答

2

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