Мое приложение принимает текущего пользователя, вошедшего в систему, и использует DirectoryServices.DirectorySearcher для получения дополнительной информации о них (некоторые свойства мы сохранили в нескольких настраиваемых полях AD, а также их адрес электронной почты). Это прекрасно работает, хотя я всегда был немного медленным - мой однопоточный код мог обрабатывать только около 2-3 запросов в секунду.
Настоящая проблема возникла, когда я переместил этот код на веб-сервер. При одновременном использовании нескольких пользователей количество запросов в секунду значительно возрастает, и процесс LSASS.EXE привязывается к моему серверу. Я проверил контроллеры домена, и они просто в порядке - узкое место явно на стороне приложения. Я подозреваю, что то, что замедляет меня, - это запрос / ответ NTLM / Kerberos, а количество одновременных запросов привязывает даже многоядерный процессор.
Наша сетевая политика не допускает анонимного чтения из AD, поэтому выбор отсутствует. Кроме того, я пробовал каждый элемент «AuthenticationTypes» (в примере я использую .FastBind), но все они, похоже, имеют примерно одинаковую пропускную способность при одинаковой нагрузке на процессор.
У кого-нибудь есть идеи, как мне обойти это ограничение и снизить требования к процессору?
Вот код, который я использую - довольно просто:
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