2012-09-17 58 views
1

我正在编写一段代码,该代码应根据其SamAccountName作为搜索参数在特定用户的GivenName(forename)和Surname的活动目录中进行搜索,然后返回一个包含他们的名字和姓氏的字符串。UserPrincipal SamAccountName引发未处理的DirectoryServicesCOMException“发生本地错误”

到目前为止我写的代码如下:

public static string GetName(string uName) 
    { 
     StringBuilder builder = new StringBuilder(); 
     using (PrincipalContext context = new PrincipalContext(ContextType.Domain, "serverName")) 
     { 
      UserPrincipal user = new UserPrincipal(context); 

      user.SamAccountName = uName; 

      PrincipalSearcher srch = new PrincipalSearcher(user); 
      srch.QueryFilter = user; 
      PrincipalSearchResult<Principal> res = srch.FindAll(); 
      foreach (UserPrincipal u in res) 
      { 
       builder.Append(u.GivenName); 
       builder.Append(" "); 
       builder.Append(u.Surname); 
      } 
      return builder.ToString(); 
     } 
    } 

我与上面的代码具有的问题是,在运行时的线

user.SamAccountName = uName; 

引发以下错误:DirectoryServicesCOMException未处理“出现本地错误”

主体上下文对象创建得很好,就像用户主体对象一样,它只会抛出第执行上述行时发生错误。更奇怪的是,这些代码似乎在几天前运行。如果有人读到这个有什么想法,为什么我得到这个错误,我会非常感激!

P.S. 因为血腥的错误信息有点过于隐晦而无法真正弄清楚,或者至少对我来说(真的发生了本地错误),我是否诉诸这些?无论开发人员认为这是一个有用的错误消息是一个白痴。

回答

2

可能的原因:

  1. 没有与该计算机的域成员或者认证的问题。例如,运行代码的计算机上的时钟是否与目标域中的DC同步(5分钟内)?
  2. 用户名无效。例如,它包含无效字符。
+0

感谢您的新鲜眼睛可以这么说。这确实是证书无效。我意识到,当使用PrincipalContext.ValidateCredentials检查凭证的有效性时,它证实没有问题。问题在于我实际上没有在上面的方法中使用用户名和密码提供PrincipalContext。我能够通过更改PrincipalContext参数来解决此问题:PrincipalContext上下文=新的PrincipalContext(ContextType.Domain,域名,uName,pswd –

+0

@ Termin8tor很高兴知道你解决了它。 – akton

相关问题