1

Ich habe mit den DirectoryEntry-Objekten im DirectoryServices-Namespace gearbeitet und es lief sehr gut. Aber ich habe Änderungen an einer meiner LDAP-Klassen vorgenommen und plötzlich hat es aufgehört, an den 32-Bit-Builds meines Programms zu arbeiten.

Ich habe die ActiveDs-Referenz in mein Projekt importiert, um die ADSI-Objekte in die entsprechenden Typen zu konvertieren. Aber seitdem können meine Projekte nicht korrekt binden, wenn Instanzen des DirectoryEntry-Objekts erstellt werden.


Ich habe versucht, mit dem LDAP UND WinNT-Provider, aber vergeblich zu binden. Der Fehler, den ich erhalte, ist der unbekannte Fehler 0x80005000, der versucht zu binden.

Auch diese einfache Code versagt (die als verbindlich ist ein wichtiger Bestandteil ist nicht überraschend!)
Warum funktioniert mein DirectoryEntry plötzlich nicht mehr?

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

Gibt es einen Grund, warum diese Arbeit plötzlich sollte aufhören? Könnte eine Referenz eine bereits vorhandene DLL auf einer 32-Bit-Maschine beschädigen?

Hinweis:
Ich habe auch versucht, LDAP mit einem VBS-Skript abzufragen, aber es hängt nur.


Ergebnisse von Daros Vorschlag:
Code

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



Die Log-Datei erzeugt:
Unbekannter Fehler (0x80005000)
bei System.Di rectoryServices.DirectoryEntry.Bind (Boolean throwIfFail)
bei System.DirectoryServices.DirectoryEntry.Bind()
bei System.DirectoryServices.DirectoryEntry.get_Name()
bei Test.Program.Main() in C: \ Benutzer \ # Benutzername # \ Dokumente \ Visual Studio 2010 \ Projekte \ # Projekt # \ Test \ Programm.cs: Zeile 20

Antwort

0

Funktioniert das für Sie?

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

Ich nehme an, "Server" ist der NetBios-Name? Versuchen Sie es mit dem FQDN.

Wenn Sie mit Ihrem eigenen Anmeldeinformationen zu binden, können Sie:

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

Und wenn Sie Ihre eigene Domain verbindlich sind, könnten Sie verwenden:

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

oder einfach:

DirectoryEntry de = new DirectoryEntry(); 

Ich hoffe, dass hilft.

+0

Jede Bindung mit dem DirectoryEntry-Objekt schlägt fehl. Ich habe die IP-Adresse und den FQDN verwendet. Immer noch Nada. Ich kann jedoch eine Verbindung zu Ldap herstellen, wenn ich die LdapConnection-Klasse im Namespace Protocols verwende. – mrstebo

+0

Also das Bit Code, den ich gepostet habe, verursacht den gleichen Fehler?Was ist los: versuchen Sie { LdapConnection lc = neue LdapConnection (Environment.UserDomainName); lc.Bind(); DirectoryEntry de = neuer DirectoryEntry ("LDAP: //" + lc.SessionOptions.DomainName); Zeichenfolge Name = de.Name; } catch (Ausnahme ex) { Console.WriteLine (ex); } Können Sie mit ldp.exe binden? – Daro

+0

Ich habe die LdapConnection-Klasse verwendet, aber wenn eine DirectoryEntry-Instanz verwendet werden muss, löst sie eine Ausnahme (0x80005000) für die Bindung aus. – mrstebo

Verwandte Themen