Mon application prend l'utilisateur actuellement connecté et utilise un DirectoryServices.DirectorySearcher pour tirer quelques détails supplémentaires à leur sujet (certaines propriétés que nous avons stockées dans quelques champs AD personnalisés, ainsi que leur adresse e-mail). Cela fonctionne très bien, même si j'ai toujours pensé que c'était un peu lent - mon code monothread ne pouvait faire qu'environ 2-3 requêtes/seconde à AD.System.DirectoryServices place mon processeur en mode multithread - puis-je réduire le fardeau?
Le vrai problème est survenu lorsque j'ai déplacé ce code sur un serveur Web. Avec plusieurs utilisateurs simultanés, le nombre de requêtes/secondes saute grandement, et les chevilles de processus LSASS.EXE sur mon serveur. J'ai vérifié les contrôleurs de domaine, et ils sont très bien - le goulot d'étranglement est clairement du côté de l'application. Je suspecte que ce qui ralentit mon downdown est le défi/réponse de NTLM/Kerberos, et le nombre de demandes simultanées maintient même le processeur multi-core.
Notre stratégie de réseau n'autorise pas les lectures anonymes provenant de AD, de sorte que le choix est désactivé. En outre, j'ai essayé tous les membres de "AuthenticationTypes" (dans l'exemple, j'utilise .FastBind), mais ils semblent tous avoir à peu près le même débit avec la même charge sur le processeur.
Est-ce que quelqu'un a une idée de comment je pourrais contourner cette restriction et réduire mes demandes sur le processeur?
Voici le code que je utilise - assez simple:
Dim sPath As String = "LDAP://" & stringUserDN
Dim entry As New DirectoryEntry(sPath)
entry.AuthenticationType = AuthenticationTypes.FastBind
For Each stringADNumber As String In entry.Properties(_ADPROP_EMPLOYEENUMBER)
'return first item
Return Convert.ToInt32(stringADNumber)
Next
Return String.Empty