Почему мой DirectoryEntry внезапно перестал работать? - PullRequest
1 голос
/ 29 марта 2012

Я работал с объектами 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

1 Ответ

0 голосов
/ 30 марта 2012

Это у вас работает?

        try
        {
            DirectoryEntry de = new DirectoryEntry("LDAP://server", "user", "password",  AuthenticationTypes.Secure);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);
        }

Я предполагаю, что "Сервер" - это имя NetBios? Попробуйте использовать полное доменное имя.

Если ваша привязка с вашими учетными данными, вы можете использовать:

        DirectoryEntry de = new DirectoryEntry("LDAP://server", null, null, AuthenticationTypes.Secure);

И если вы привязываетесь к своему собственному домену, вы можете использовать:

DirectoryEntry de = new DirectoryEntry("LDAP://" + Environment.UserDomainName, null, null, AuthenticationTypes.Secure);

или просто:

DirectoryEntry de = new DirectoryEntry();

Надеюсь, это поможет.

...