Je ressens un problème très étrange à l'aide de la classe DirectorySearcher lors de la recherche de groupes d'interrogation sur LDAP.
using(var directoryEntry = new DirectoryEntry(thePath,theUserName,ThePassword) { var ONLY_GROUPS = "(objectClass=group)" var filter = string.format("(&{0}({1}=*{2}*))",ONLY_GROUPS,"Name","theGroupName"); using(var searcher = new DirectorySearcher(directoryEntry,filter)) { ... searcher.FindAll(); ... }
4 Réponses :
Puisque vous utilisez des LDAP, il est probablement un problème avec le certificat SSL. Si le certificat n'est pas confié à l'ordinateur qui initie la connexion, l'exception que vous obtenez est exactement la même que si le serveur n'a pas pu être contacté du tout.
sur un ordinateur problématique, téléchargez le certificat à partir du serveur en utilisant < Un href = "https://stackoverflow.com/a/22251597/1202807"> Ce script PowerShell : p> remplace Après avoir exécuté ce script , il y aura un fichier exemple.com < / code> dans la première ligne avec votre nom de domaine. Laissez le
https: // code> et le
: 636 code> (sauf si vous exécutez des ldaps à partir d'un port non standard). P>
certificat.cer code> dans le répertoire actuel. Ouvrez-le pour le voir. Vous verrez un avertissement si le certificat n'est pas fait confiance. Si ce n'est pas le cas, le certificat racine doit être ajouté aux certificats racines de confiance de l'ordinateur actuel. P> P>
Bien que cela semble semble qu'il est lié au certificat LDAP. Comme je l'ai dit, il ne s'agit pas d'une application de console qui exécute le même code qui fonctionne. De plus, nous pouvions voir avec Wireshark Les données sont renvoyées sur le serveur, mais elles sont bloquées plus tard. Qui augmente un autre problème possible, peut-on bloquer les réponses d'une taille définie? Peut-il être lié à certains attendre à une API Web?
Avez-vous vérifié le certificat quand même? Le certificat doit être approuvé et vous devez accéder au domaine avec le même nom de domaine utilisé dans le certificat (si le certificat a le nom d'un contrôleur de domaine, vous devez nous envoyer le nom complet du contrôleur de domaine dans le LDAP. chemin).
Autre code pourrait éventuellement ignorer les problèmes de certification de différentes manières. Pouvez-vous montrer une partie du code qui fonctionne?
Le même code que mentionné dans mon poste, je ne crois pas que ce soit un problème de certificat, car comme je l'ai mentionné, une autre requête LDAP fonctionne, pour obtenir les contrôleurs de domaine.
Est ThePath code> exactement le même dans celui qui fonctionne et celui qui ne le fait pas? En outre, quel est le code que vous utilisez pour trouver des contrôleurs de domaine?
D'abord, je voudrais vous remercier pour l'aide, il n'y a rien de spécial lors de l'obtention des contrôleurs de domaine, le même code. Le filtre est différent
Pouvez-vous ajouter ce code à votre question, y compris les valeurs que vous utilisez pour ThePath code>? (Vous pouvez remplacer votre nom de domaine par «exemple.com») Il doit y avoir quelque chose de différent.
Voici le code pour obtenir des groupes LDAP Voici le code permettant d'obtenir des contrôleurs de domaine LDAP p>
Une clarification, le code permettant d'obtenir des groupes lancons COMException "Server n'est pas opérationnel" via une application Web. et le même code fonctionne pour la demande de console
Un autre point important, la Comexception n'est pas "Server n'est pas opérationnelle" mais le délai d'attente qui pose la question. ce qui pourrait être fait sur le niveau IIS ou le web.config qui pourrait causer des problèmes de délai d'attente
J'aimerais ajouter une autre mise à jour importante sur ce problème. Il semble que la première tentative d'exécution de la requête LDAP fonctionne! . p>
Signification après Iisresres, la requête du groupe LDAP fonctionne Mais alors j'attends 120 secondes, les choses cessent de travailler et que la requête LDAP est bloquée / la main sur la scène de la liaison Après un autre iisrest, le groupe LDAP à nouveau fonctionne, attendez 120 secondes le même résultat p>
J'ai maintenant une autre étape avec la compréhension de mon problème
après avoir appelé le code mentionné ci-dessus Je pouvais voir après avoir exécuté netstat sur la machine LDAP P>
netstat -nat | Findstr My_IP_Address | FindStr: 389 Je pouvais voir que la connexion reste établie même lorsque l'utilisation de la section est effectuée p>
TCP LDAP_IP_Address: 389 my_IP_Address: 24730 Invité établi P>
Je pouvais voir qu'il existe un autre type d'authentification de paramètre, par défaut sécurisé
Lors de l'utilisation de mon code de cette façon, la connexion est disposée après l'utilisation de la section P>
Vous pouvez utiliser Explorateur de processus pour voir la demande de réseau que votre Le programme essaie de faire (IP et Port). Cela pourrait vous en dire plus sur ce que c'est essayer de faire et pourquoi cela échoue.
Est
ThePath code> pointant sur LDAPS (port 636)?
Un autre progrès que nous avons, je ne sais pas si cela est associé, la réponse à la réaction des groupes d'un chiffre d'affaires problématique de 2,5 Mo (ne semble pas beaucoup). et le problème se produit sur les LDAP. toujours comme je l'ai dit, les groupes d'obtention fonctionnent dans un code externe