Я работал с объектами DirectoryEntry в пространстве имен DirectoryServices, и все шло очень хорошо.Но я внес изменения в один из моих классов LDAP, и он неожиданно перестал работать над 32-битными сборками моей программы.
Я импортировал ссылку ActiveDs в свой проект, чтобы преобразовать объекты ADSI вих соответствующие типы.Но с тех пор мои проекты не могут правильно связываться при создании экземпляров объекта DirectoryEntry.
Я пробовал связываться с провайдером LDAP AND WinNT, но безрезультатно.Ошибка, которую я получаю, это неизвестная ошибка 0x80005000 при попытке связывания.
Даже этот простой код завершается ошибкой (что неудивительно, поскольку связывание является важной частью!)
static void Main(string[] args)
{
try
{
using(var de = new DirectoryEntry("LDAP://servername", "user", "password", AuthenticationType.Secure)
{
Console.WriteLine(de.Name)
}
}
catch(Exception ex)
{
Console.WriteLine(ex)
}
}
* 1011Есть ли какая-то причина, почему это должно внезапно перестать работать?Может ли ссылка повредить уже существующую библиотеку DLL на 32-разрядной машине?
Примечание:
Я также пытался запрашивать LDAP с помощью сценария VBS, но он просто зависает.
Результаты предложения Даро:
код
static void Main()
{
try
{
using (var ldap = new LdapConnection(new LdapDirectoryIdentifier("ad1")))
{
ldap.Bind();
using (var de = new DirectoryEntry("LDAP://" + ldap.SessionOptions.DomainName))
{
Console.WriteLine(de.Name);
}
}
}
catch(Exception ex)
{
using(var fs = new FileStream("C:\\error.log", FileMode.Create, FileAccess.Write))
{
using(var sw = new StreamWriter(fs))
{
sw.WriteLine(ex.Message);
sw.WriteLine(ex.StackTrace);
}
}
}
Файл журналапроизводит:
Неизвестная ошибка (0x80005000)
в System.DirectoryServices.DirectoryEntry.Bind (Boolean throwIfFail)
в System.DirectoryServices.DirectoryEntry.Bind ()
в System.DirectoryServices.DirectoryEntry.get_Name ()
в Test.Program.Main () в C: \ Users \ # имя пользователя # \ Documents \ Visual Studio 2010 \ Projects \ # project # \ Test \ Program.cs: строка 20