System.DirectoryServices.DirectoryServicesCOMException(0x8007203B):发生了本地错误

时间:2011-06-09 12:37:04

标签: c# active-directory directoryservices

当我们尝试在ActiveDirectory中搜索用户时,我们会获得该异常 - 0x8007203B

基本上我们部署了一个使用DirectoryEntry&的网络服务。 DirectorySearcher类用于在AD中查找用户,有时会发生此异常。但是当我们进行IISReset时,它再次正常工作。

代码非常简单:

DirectoryEntry domainUser = new DirectoryEntry("LDAP://xxx.yyy/dc=xxx,dc=yyy", "domain\user", "pwd", AuthenticationTypes.Secure); 
DirectoryEntry result = new DirectorySearcher(domainUser, filter);

这种情况只发生过一次。我没有太多信息要提供,任何猜测都非常赞赏

这就是我的过滤器的样子

public static string BuildFilter(DirectoryEntry dirEntry, string userName, string userMail)
{
   try
   {
      string filter = string.Empty;

      if (!string.IsNullOrEmpty(userName) && string.IsNullOrEmpty(userMail))
         filter = string.Format(@"(&(objectClass=user)(samaccounttype=805306368)(|(CN={0})(samaccountname={0})))", userName);
      else if (string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(userMail))
         filter = string.Format(@"(&(objectClass=user)(samaccounttype=805306368)(mail={0}))", userMail);
      else
         filter = string.Format(@"(&(objectClass=user)(samaccounttype=805306368)(|(CN={0})(samaccountname={0})(mail={1})))", userName, userMail);

      return filter;
   }
   catch (Exception ex)
   {
       _logger.Error("BuildUserSearch - Failed to build LDAP search", ex);
   }
   return null;
}

2 个答案:

答案 0 :(得分:0)

你说这只是在一段时间之后才追加。由于DirectoryEntry和DirectorySearcher是在COM对象上构建成一次性类的,我首先会添加一些using部分,以确保底层对象被核心释放。

using(DirectoryEntry root = new DirectoryEntry(ldapPath))
{
  using(DirectorySearcher searcher=new DirectorySearcher(root))
  {
    ...
  }
  ...
}

答案 1 :(得分:-2)

有什么猜测值得赞赏吗?

然后是我的:

  1. ASP.NET: DirectoryServicesCOMException [...];
  2. Windows Error Codes: Repair 0x8007203B. How To Repair 0x8007203B
  3. 让我感到困惑的是你说它大部分时间都有效......

    这有帮助吗?

    P.S。如果我想到其他任何事情,我会更新。