Pourquoi ne l'authentification LDAP avec DirectoryEntry par intermittence jeter COMException (0x8007203A): “Le serveur n'est pas opérationnel”?

Si quelqu'un a une expérience similaire, merci de poster les détails ci-dessous!

Je suis en train de construire un ASP.NET site web qui doit prendre en charge l'authentification à l'encontre de LDAP.

Sur windows, LDAP authentification peut être effectuée via Active Directory (je ne suis pas expert, mais ANNONCE semble être simplement une saveur particulière de ldap). Je n'ai pas de contrôle de la publicité et/ou des serveurs LDAP.

J'ai essayé plusieurs méthodes d'authentification, mais je l'ai réglé à l'aide d'un seul DirectoryEntry par tentative d'authentification:

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(...

De la récupération de la NativeObject provoque une COMException si quoi que ce soit qui ne va pas, par exemple si l'authentification a échoué, l'exception est quelque chose comme "échec d'ouverture de session: nom d'utilisateur inconnu ou mot de passe incorrect", et si le serveur ldap est inaccessible ou heures, quelque chose comme "Le serveur n'est pas opérationnel."

Cela fonctionne, pour l'essentiel, mais après un nombre variable de jours, toujours en commençant par la première chose le matin, nous obtenons "Le serveur n'est pas opérationnel." jusqu'à ce que IIS est redémarré. Ce n'est évidemment pas une bonne solution à long terme, mais aussi loin que je peux dire que la faute incombe à la Com de l'Objet sous-jacent DirectoryEntry - pas quelque chose de facile à corriger.

Cette problème n'est-ce pas nouveau ou inconnu. Certaines personnes ont passé par le support de microsoft avec des résultats mitigés; fondamentalement, les réponses semblent descendre à "prendre votre chemin ldap et créer un peu d'alternatives équivalentes et peut-être l'un de ceux qui vont le travail". Chaque fois que vous essayez, ou bien sûr, vous ne saurez pas pour quelques jours si elle a effectivement travaillé, et jusqu'à ce qu'une solution est trouvée, nous sommes de retour à "redémarrer les serveurs windows chaque nuit".

Comme un début, j'ai essayé ldap chemins d'accès dans le format

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

Toujours avec un nom d'utilisateur avec le modèle suivant:

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

Toutes ces méthodes de travail en amont, mais ne parviennent pas après un nombre variable de jours (et de commencer à travailler après une réinitialisation des services internet). Le serveur est en cours d'exécution IIS6 sur win 2k3.

Si quelqu'un a ces problèmes, merci de poster ci-dessous, et peut-être, éventuellement, nous allons trouver un modèle de travail ou d'avoir un nombre suffisant d'exemples pour convaincre microsoft pour résoudre ce problème.

  • Il est possible que cette erreur est liée à win 2k3 de clustering options - nous avons migré vers un non-cluster de serveur unique système, et les derniers jours ont été sans problème.
  • Ce qui était en cluster? Le serveur de l'exécution de votre application ou le serveur qui exécute AD?
  • Le serveur qui exécute l'application. Le serveur LDAP est en fait un non-windows de la machine exécutant quelque part à l'extérieur - je ne suis pas sûr de la configuration. Aussi, les problèmes semblent se produire même pour les construits manuellement UDP "connexions", ce qui suggère que cela est un peu de bas-niveau de la chose.