¿Por qué la autenticación contra LDAP con DirectoryEntry lanza COMException (0x8007203A) de forma intermitente: “El servidor no está operativo”?

Si alguien tiene una historia similar, por favor publique los detalles a continuación.

Estoy creando un sitio web ASP.NET que debe admitir la autenticación contra LDAP.

En Windows, la autenticación LDAP se puede realizar a través de Active Directory (no soy un experto, pero AD parece ser simplemente un sabor particular de LDAP). No controlo los servidores AD y / o LDAP.

He probado varios métodos de autenticación, pero he decidido utilizar una solaDirectoryEntry por intento de autenticación:

using (DirectoryEntry de = new DirectoryEntry(ldapPath, ldapUsername, password, AuthenticationTypes.ServerBind)) {
    try {
        // Bind to the native AdsObject to force authentication.
        object obj = de.NativeObject;//not IDisposable
    } catch(...

Recuperar el NativeObject causa unCOMException si algo sale mal, por ejemplo, si la autenticación falló, la excepción es algo como "Error de inicio de sesión: nombre de usuario desconocido o contraseña incorrecta", y si el servidor ldap no está disponible o se agota el tiempo de espera, algo como "El servidor no está operativo. "

Esto funciona, básicamente, pero después de un número variable de días, siempre comenzando a primera hora de la mañana, obtenemos "El servidor no está operativo". hasta que IIS se reinicie. Obviamente, esta no es una gran solución a largo plazo, pero, por lo que puedo decir, la falla está en el objeto Com subyacente en DirectoryEntry, no es algo fácil de solucionar.

Esta problema no es nuevo o desconocido. Algunas personas han pasado por el soporte de Microsoft con resultados mixtos; Básicamente, las respuestas parecen reducirse a "tomar su ruta de LDAP y crear algunas alternativas equivalentes y tal vez una de esas funcione". Cada vez que lo intente, o por supuesto, no sabrá por unos días si realmente funcionó, y hasta que se encuentre una solución real, volveremos a "reiniciar los servidores de Windows todas las noches".

Para empezar, he intentado rutas de ldap en el formato

* "LDAP://server.uri:636"
* "LDAP://insecure.server.uri:389"
* "LDAP://server.uri:636/cn=username,ou=staff,o=myOrganisation,c=org"

Siempre con un nombre de usuario con el siguiente patrón:

* "cn=username,ou=staff,o=myOrganisation,c=org"

Todos estos métodos funcionan inicialmente, pero fallan después de un número variable de días (y comienzan a funcionar después de un reinicio de IIS). El servidor ejecuta IIS6 en win 2k3.

Si alguien más tiene estos problemas, publique a continuación, y tal vez finalmente encontremos un patrón con el que trabajar o tengamos suficientes ejemplos para convencer a Microsoft de que solucione esto.

Respuestas a la pregunta(3)

Su respuesta a la pregunta