尝试查询Active Directory时出错-需要回收应用程序池

Gra*_*ant 7 iis application-pool active-directory

我在.NET Web应用程序中有以下代码块,用于查询用户的AD

using (DirectoryEntry de = new DirectoryEntry(ldap))
{
    using (DirectorySearcher adSearch = new DirectorySearcher(de))
    {
        adSearch.Filter = "(&(objectCategory=person)(objectClass=user)(samAccountName=username))";
        SearchResult adSearchResult = adSearch.FindOne();
    }
}
Run Code Online (Sandbox Code Playgroud)

运行此命令时,有时会出现以下错误:

System.Runtime.InteropServices.COMException(0x80005000):System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
在System.DirectoryServices.DirectoryEntry.Bind()在System.DirectoryServices.DirectoryEntry.get_AdsObject()在未知错误(0x80005000)System.DirectoryServices.DirectorySearcher.FindOne()上的.DirectoryServices.DirectorySearcher.FindAll(Boolean findMoreThanOne)

引发此错误时,每次运行时都会出错。若要更正此问题,我必须转到与此Web应用程序关联的IIS应用程序池并对其进行回收。回收后,该代码在一段时间内有效。然后几个小时后错误再次出现。

需要注意的其他信息:

  • 错误时,应用程序池仍在运行。不过,回收修复它
  • 我在两个配置相同的不同Web服务器上运行相同的代码。在第一台Web服务器上会发生此问题,而在第二台Web服务器上不会发生
  • 应用程序池在AD服务帐户下运行。两台服务器的应用程序池上使用相同的帐户
  • 我尝试重新创建与此网络应用程序关联的应用程序池,但未成功

对于在IIS中寻找永久解决方案的任何建议,我将不胜感激。我不能每隔几个小时就回收一次应用程序池。

谢谢