2009-07-21 13 views
6

Si alguien tiene una historia similar, por favor publique los detalles a continuación!¿Por qué la autentificación contra LDAP con DirectoryEntry arroja intermitentemente COMException (0x8007203A): "El servidor no está operativo"?

Estoy construyendo un sitio web ASP.NET que necesita admitir 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 intentado varios métodos de autenticación, pero me he decidido por el uso de una sola DirectoryEntry 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(... 

Recuperando el NativeObject provoca una COMException si algo va mal en absoluto, por ejemplo si el Error de autenticación, la excepción es algo así 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 así 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 se reinicie IIS. Evidentemente, esta no es una gran solución a largo plazo, pero, por lo que puedo ver, la falla radica en el Com Object subyacente a DirectoryEntry, que no es algo fácil de corregir.

Thisproblemisn'tneworunknown. Algunas personas han pasado por el soporte de Microsoft con resultados mixtos; Básicamente, las respuestas parecen reducirse a "tomar su ruta ldap y crear algunas alternativas equivalentes y tal vez una de ellas funcione". Cada vez que intentes, o por supuesto, no sabrás por unos días si realmente funcionó, y hasta que se encuentre una solución real, volvemos a "reiniciar los servidores de Windows todas las noches".

Como punto de partida, he tratado de caminos 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 al principio, pero después de fallar un número variable de días (y comenzar a trabajar 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 eventualmente encontremos un patrón para trabajar con o tenga suficientes ejemplos para convencer a Microsoft de que corrija esto.

+0

Es posible que este error está relacionado con ganar opciones de agrupamiento de 2k3 - hemos migrado a un sistema de servidor único no agrupado, y los últimos días han estado libres de problemas. –

+0

¿Qué estaba agrupado? ¿El servidor que ejecuta su aplicación o el servidor que ejecuta AD? –

+0

El servidor que ejecuta la aplicación. El servidor LDAP era en realidad una máquina que no era Windows que funcionaba en algún lugar externo: no estoy seguro de su configuración. Además, los problemas parecen ocurrir incluso para las "conexiones" UDP construidas manualmente, lo que sugiere que esto es algo de bajo nivel. –

Respuesta

5

Aunque no puedo determinar con precisión la causa de este problema, parece haberse detenido después de migrar a un servidor no agrupado.

Hay otros datos curiosos acerca de este error:

  • reiniciar el proceso de acogida asp.net no es suficiente para solucionar el problema. Esto es raro; es de esperar que el sistema operativo libere forzosamente recursos en el proceso de muerte
  • Al reiniciar el servicio IIS no se liberan los recursos (los puertos UDP).netstat revela que los puertos parecen libres, pero todos los puertos abiertos en realidad están abiertos por el proceso # 4: el proceso del sistema.
  • Asesinato IIS (por ejemplo, a través del administrador de IIS) libera los puertos UDP, y luego la autenticación vuelve a funcionar.

En general, esto se parece mucho a un problema de controlador o kernel en win2k3 con clústeres habilitados, y no un problema relacionado con .NET.

Por lo tanto, si alguien más tropieza con un problema similar, verifique si la agrupación está habilitada; puede ahorrarle semanas de dolores de cabeza.

0

He leído algo sobre la comprobación con NETSTAT y comprobando los estados de las conexiones activas. un múltiplo TIME WAIT podría indicar un problema con la redirección de puertos. No obstante, recibo el mismo error en los últimos 3 días. Le pedí al administrador de la red que modificara mis permisos, e incluso eso no me ayudó. El artículo sobre esto en más detalles: C# .NET Application looses Connection to the Active Directory

+0

http://forums.techarena.in/active-directory/943180.htm no encontrado – Kiquenet

Cuestiones relacionadas