Wie kann ich feststellen, ob mein DirectoryEntry tatsächlich mit meinem LDAP-Verzeichnis verbunden ist?

8

Ich verbinde mich mit einem LDAP-Verzeichnis in C #, also habe ich die DirectoryEntry-Klasse verwendet.

Wenn Sie den "new DirectoryEntry" mit Adresse, Login und Passwort machen, soll er sich mit dem LDAP-Verzeichnis verbinden.

Aber selbst wenn die Verbindung nicht funktioniert hat, wird sie ohne Probleme zurückgegeben und die Variable verzeichniseintrag wird gesetzt.

Also weiß ich, dass meine Verbindung wirklich geöffnet ist? Gerade jetzt benutze ich einen sehr sehr hässlichen Hack: Ich habe ein "if (mydirectory.SchemaEntry)", das eine Ausnahme generiert, wenn die Verbindung nicht aufgebaut wurde, weil einige der Mitglieder des DirectoryEntry, wie SchemaEntry, aren nicht gesetzt, wenn die Verbindung fehlgeschlagen ist. Aber 1: das muss 11/10 auf der Hässlichkeitsskala 2 sein: das braucht viel Zeit, bevor es scheitert.

Was ist der beste Weg, dies zu tun? Sicher, Microsoft muss etwas bereitgestellt haben (auch wenn ich ein LDAP-Verzeichnis und kein Active Directory verwende), um zu wissen, ob ich wirklich verbunden bin?

    
Ksempac 30.06.2009, 13:17
quelle

4 Antworten

1

Ok, also war die Lösung von marc_s ungefähr das, was ich tat (außer dass ich nach SchemaEntry und nicht nach NativeObject suchte). Die Zeitüberschreitung ist jedoch viel zu lang (die Abfrage wird ausgeführt, um Autokomplettierungswerte für ein Formular zu füllen). Ich glaube, ich bevorzuge es, so zu tun, als wäre die Verbindung offen und lasse die Abfrage laufen. Auf diese Weise kann ich meine eigene, kleinere Timeout-Verzögerung einstellen.

    
Ksempac 01.07.2009, 06:37
quelle
11

Wenn nur ein Verzeichniseintrag neu erstellt wird, erstellt NICHT eine Verbindung zum LDAP-Speicher.

Erst wenn Sie seine Eigenschaften verwenden oder wenn Sie explizit auf die Eigenschaft .NativeObject zugreifen, erhalten Sie tatsächlich eine Verbindung zum LDAP-Speicher.

Um sicherzustellen, dass Sie verbunden sind, lesen Sie einfach die (DirectoryEntry).NativeObject in einer try ... catch -Klausel aus - wenn es abbricht, haben Sie ein Problem, ansonsten ist Ihre Verbindung jetzt aktiv und aktiv.

Leider gibt es meines Wissens keine Eigenschaft oder Methode, die Sie aufrufen können, um herauszufinden, ob Sie mit DirectoryEntry erfolgreich eine Verbindung zu LDAP hergestellt haben oder nicht.

Marc

    
marc_s 30.06.2009 14:14
quelle
2

Sie können DirectoryEntry.Properties.Count überprüfen. Wenn es & gt; 0, es ist ein gültiges Objekt. .Properties ist niemals null - Sie können die Anzahl auch dann lesen, wenn Sie nicht mit einem gültigen DirectoryEntry verbunden sind, und ein gültiges DE hat immer mindestens eine Eigenschaft.

Kein Versuch / Catch oder Ausnahmen notwendig.

    
ScottBai 05.10.2010 12:56
quelle
1

Sie können DirectoryEntry.Properties.Count überprüfen. Wenn es & gt; 0, für ein gültiges Objekt. Aber sagen Sie immer noch, dass Ihr LDAP-Server ausgefallen ist. Sie können es nicht mit einer seiner Eigenschaften identifizieren. Stattdessen können Sie es mit dem Versuch fangen Block

fangen %Vor%

Hoffe das hilft dir

    
Seeni Abirami 06.07.2015 10:39
quelle