Error Message „The directory service is unavailable“ when querying ApacheDS LDAP Server

Quick note to myself: An error message

The directory service is unavailable (English)
Der Verzeichnisdienst ist nicht verfügbar (German)

when querying an LDAP ApacheDS server can be caused by the wrong authentication type.

The full exception trace was:

System.Runtime.InteropServices.COMException occurred
ErrorCode=-2147016689
at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
at System.DirectoryServices.DirectoryEntry.Bind()
at System.DirectoryServices.DirectoryEntry.get_AdsObject()
at System.DirectoryServices.DirectorySearcher.FindAll(Boolean findMoreThanOne)
at System.DirectoryServices.DirectorySearcher.FindAll()

In my code, I did a call to

var de =
  new DirectoryEntry(
    @"LDAP://localhost:10389/ou=users,ou=someou,dc=domain,dc=com",
    @"uid=admin, ou=system",
    @"********",
    AuthenticationTypes.Secure);

which failed. After I changed it to

var de =
  new DirectoryEntry(
    @"LDAP://localhost:10389/ou=users,ou=someou,dc=domain,dc=com",
    @"uid=admin, ou=system",
    @"********",
    AuthenticationTypes.None);

everything worked as expected.

Apache und IIS 7 auf derselben Maschine

Hier gibt es eine kleine Anleitung. Auszüge:

There was a question on http://forums.iis.net about having Apache and IIS7 on the same box.  here are the instructions I tested on Vista RTM and Windows Server 2008 B3.  This assumes you have two ip addresses on the box, 192.168.0.90 and 192.168.0.91.  It can be any ip’s.

1) Added or make sure your machine has two ip’s
2) Open a command prompt
3) Type netsh
4) Type http
5) Type sho iplisten.  It should be blank
6) Type add iplisten ipaddress=192.168.0.90
You should get IP address successfully added
7) Type sho iplisten again
It should sho 192.168.0.90 in the list
8) Type exit to get out of netsh
9) Type type netstat -an. See if you notice 192.168.0.90:80 in the list.  If you see 0.0.0.0:80, do an iisreset

10) Download and install Apache ( I did it with 2.2.4)
http://mirror.nyi.net/apache/httpd/binaries/win32/apache_2.2.4-win32-x86-no_ssl.msi
11) Do a default install,
12) Open httpd.conf and adjust the ip listen to 192.168.0.91:80

# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses (0.0.0.0)
#
#Listen 12.34.56.78:80
#Was 80
#Change to

Listen 192.168.0.91:80

12) Restart the Apache service.  (for some reason the start / stop thing didn’t work for me, I used net stop apache2 net start apache2.)
13) Type netstat -an
14) You should see 192.168.0.90:80 and 192.168.0.91:80.  Open a browser and test both IP’s to see if IIS7 and Apache come up.
15) Test restarting Apache service to see if it works after that.
16) Turn off Apache, browse IIS, turn of IIS, browse Apache. Test it every which way to see if it works.

Geht übrigens auch mit mehreren IP-Adressen für den IIS. Dann einfach mehrfach das „add iplisten ipaddress=…“ aufrufen. Geschickt, wenn z.B. mehrere SSL-Websites auf dem IIS installiert werden sollen.

Ergänzung August 2018

Wichtig ist auch, auf der Server-lokalen Firewall auf dem Windows-Server, eine eingehende Regel für Apache einzurichten.

Bei mir sah die Regel grob so aus:

  • Name: Apache HTTP Server
  • Enabled: Ja
  • Action: Allow the connection
  • Program: %ProgramFiles%\Apache24\bin\httpd.exe
  • Profiles: Domain, Private, Public

Es ist also eine Regel auf ein Programm, nämlich „httpd.exe“, das in allen Profilen aktiv ist. Extra Ports habe ich nicht angegeben.

Weiterhin war wichtig, dass der Apache-Dienst als Starttyp „Automatisch (Verzögerter Start)“ eingerichtet hat. Ansonsten kam es bei mir vor, dass der IIS seine Sites deaktiviert hatte, und auch Apache nicht lief. Keine Ahnung, ob das Korrelation oder Kausalität war.