NullReferenceException ldapConnection.Connect
Я знаю, что подобные вопросы задавались миллион раз. Я прочитал их и до сих пор не могу докопаться до сути. Я использую библиотеку 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);
Я получаю NullReferenceException, когда он попадает в метод ldapConn.Connect(). Проходя в отладчике, можно увидеть объект 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.
Что я пропускаю? Кажется, это должно быть что-то действительно простое.
1 ответ
Я наконец нашел это. Это было что-то действительно простое, и что-то, что нужно было установить из-за того, что это другой проект. Мне нужно было добавить Mono.Security.dll и ссылку на него.