Domino 9 und frühere Versionen > ND8: Entwicklung

C# LDAP Query gegen Domino Directory

(1/1)

Fussel1979:
Hallo zusammen,

ich bin seit ca. einer Woche auf der Suche nach einer Lösung, wie ich mittels C# eine LDAP Abfrage an das Domino Directory absetzen kann ohne irgendeine Form der Notesintegration (Interop/Notes Client) zu bedienen.

In VBS habe ich das am laufen tue mich nur irgendwie sehr schwer damit, das in C# zu realisieren, weiß aber nicht, wo's hängt.

In VBS sieht das ganze bei mir so aus und funktioniert:


--- Code: ---Const ADS_SCOPE_SUBTREE = 2
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
 
objCommand.CommandText = "SELECT * FROM 'LDAP://192.168.1.2:389' WHERE objectClass='dominoPerson'"
Set objRecordSet = objCommand.Execute

objRecordSet.MoveFirst
Do Until objRecordSet.EOF
Set objUser = GetObject(objRecordSet.Fields("ADsPath").Value)
Debug.Print objUser.Name
objRecordSet.MoveNext
Loop
--- Ende Code ---

Es geht konkret dadrum, das ich in einem C# Projekt einen übergebenen Namen dahingehend überprüfen möchte, ob es einen entsprechenden User im AD und im Domino Dir. gibt oder nicht. Der AD Part ist garkein Problem und funktioniert, nur der Notespart in C# macht mir massiv Kopfzerbrechen, aber vielleicht stehe ich auch einfach nur auf dem Schlauch.

Bisher habe ich C# folgendes für den Notespart:

--- Code: ---            DirectorySearcher search = new DirectorySearcher();

            search.SearchRoot = new DirectoryEntry("LDAP://192.168.1.2:389");
            search.Filter = string.Format("(&(objectclass=dominoPerson)(cn=" + sUsername + "))");
            search.PropertiesToLoad.Add("cn");
            SearchResult SearchResult = search.FindOne();
--- Ende Code ---

Ergebnis ist ein "Protocol error".

Kann mir jemand sagen was ich falsch mache?!

Vielen Dank & Gruß,
Markus

Tode:
Mache mal folgendes:
Öffne mal einen Commandprompt und gehe ins Notes- Verzeichnis des Clients.
Gib dann folgendes ein:

ldapsearch.exe -h 192.168.1.2 "(&(objectClass=dominoPerson)(cn=Tido Test))" cn

Was kommt zurück?
Wenn das funktioniert, dann liegt Dein Fehler irgendwo im C#, und Du musst einen C#- Spezialisten fragen. Wenn das nicht klappt, dann poste mal die Fehlermeldung hier, dann hat es was mit der Domino- Konfiguration zu tun...

m3:
http://geekswithblogs.net/mhamilton/archive/2005/10/04/55920.aspx

Fussel1979:
Hallo zusammen,

danke für Eure Antworten.

Der Fehler liegt ziemlich sicher im verwendeten C# Quelltext, da mein VB Script tadellos funktioniert.

LDAPSearch mit entsprechenden Parametern liefert ebenfalls ergebnisse.

Das Abfragen des ADS per LDAP funktioniert in C# problemlos nach gleichem Schema bekomme ich aber vom Domino Directory keine Daten, sondern nur einen Fehler.

Da nur das Abfragen des Domino Dirs per LDAP nicht funktioniert, dachte ich, es gäbe irgendwelche Notesspezifika, die ich nicht kenne, die man aber beim Query mit bedenken muss, deswegen habe ich überhaupt hier im Forum den Thread eröffnet.

Ich könnte natürlich auch LDAPSearch über den Quelltext ansprechen oder das VBS, aber eine native C# Variante wäre mir lieber.

Vg,
Markus

Fussel1979:
Hallo zusammen,

ich nochmal, ich gebe dann mal selber die Antwort auf meine Frage, habe es gerade herausgefunden.

Notes will wohl - anders als das AD - zwingend die Angabe der Authentifizierungsmethode.

Von daher muss das Query so aussehen:


--- Code: ---search.SearchRoot = new DirectoryEntry("LDAP://192.168.1.2:389",null,null,AuthenticationTypes.Anonymous);
--- Ende Code ---

Thread kann dann zu :)

Danke & Gruß,
Markus

Navigation

[0] Themen-Index

Zur normalen Ansicht wechseln