1

Я работаю с объектами DirectoryEntry в пространстве имен DirectoryServices, и это происходит очень хорошо. Но я внес изменения в один из моих классов LDAP и внезапно прекратил работу над 32-битными сборками моей программы.

Я импортировал ссылку ActiveDs в свой проект, чтобы преобразовать объекты ADSI в соответствующие типы. Но с тех пор мои проекты не могут корректно связываться при создании экземпляров объекта DirectoryEntry.


Я пробовал связываться с поставщиком LDAP и WinNT, но безрезультатно. Ошибка, которую я получаю, является неизвестной ошибкой 0x80005000 при попытке привязки.

Даже этот простой код из строя (что не удивительно, так как связывание является важной частью!)
Почему моя DirectoryEntry неожиданно перестала работать?

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) 
    } 
} 

Есть ли причина, почему это вдруг перестанет работать? Может ли ссылка испортить уже существующую 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.Di rectoryServices.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

ответ

0

Это работает для вас?

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

Я надеюсь, что это поможет.

+0

Любое связывание с объектом DirectoryEntry завершается с ошибкой. Я использовал IP-адрес и полное доменное имя. Еще нада. Однако я могу подключиться к Ldap, если я использую класс LdapConnection в пространстве имен Protocols. – mrstebo

+0

Так что бит кода, который я отправил, вызывает ту же ошибку?Как насчет: try { LdapConnection lc = new LdapConnection (Environment.UserDomainName); lc.Bind(); DirectoryEntry de = new DirectoryEntry ("LDAP: //" + lc.SessionOptions.DomainName); string Name = de.Name; } catch (Exception ex) { Console.WriteLine (ex); } Можете ли вы связать с помощью ldp.exe? – Daro

+0

Я использую класс LdapConnection, но всякий раз, когда ему нужно использовать экземпляр DirectoryEntry, он выдает исключение (0x80005000) при привязке. – mrstebo