我的应用程序获取当前登录的用户并使用 DirectoryServices.DirectorySearcher 来提取一些关于他们的额外详细信息(我们存储在一些自定义 AD 字段中的一些属性,以及他们的电子邮件地址)。这很好用,虽然我一直觉得它有点慢——我的单线程代码每秒只能向 AD 发出大约 2-3 个请求。
当我将此代码移至 Web 服务器时,真正的问题出现了。有多个同时用户,每秒请求的数量会大大增加,并且 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