尝试连接到Active Directory但收到相同的错误:System.DirectoryServices.DirectoryServicesCOMException:发生了本地错误

时间:2017-11-30 15:43:50

标签: c# asp.net active-directory ldap

以下是我尝试运行的代码:

public static string getEmail (string id)
{
            string ldapPath = "LDAP://aa.bb.net";
            string ldapUser = "OU=someGroup, DC=aa,DC=bb,DC=net";
            string ldapPassword = "xxxx";

            DirectoryEntry dEntry = new DirectoryEntry(ldapPath, ldapUser, ldapPassword);
            DirectorySearcher dSearch = new DirectorySearcher(dEntry);
            dSearch.Filter = "(&(|(sAMAccount=" + id + ")(cn=" + id + "))(|(ObjectCategory=user)(ObjectCategory=person)))";
            dSearch.PropertiesToLoad.Add("mail");

            SearchResult result = dSearch.FindOne();

            if (result != null)
            {
                string email = result.Properties["mail"].ToString();
                return email;
            }
            else return null;
}

我想使用他们的ID号搜索用户并检索他们的电子邮件(在这种情况下是' mail'属性)。我知道这是不好的做法,因为密码不应该在代码中,但是现在我只想尝试检索他们的电子邮件,看它是否有效。

每次运行时,我都会收到标题中提到的相同错误。我尝试配置IIS,我将Process Model Identity设置为Network Service,并将web.config配置为:



<identity impersonate="true" />
&#13;
&#13;
&#13;

这是堆栈跟踪: enter image description here

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

The server is not operational表示无法向域控制器打开网络连接。

您可以使用telnet命令行客户端检查连接,如下所示:

 telnet aa.bb.net 389

空白屏幕表示它有效。如果没有,它会给你一个错误。

端口389是默认的LDAP端口。但还有其他选择:

  • 636:LDAP over SSL
  • 3268:全球目录
  • 3269:SSL上的全局目录

如果389不起作用,那么检查它们并查看哪些工作(如果有的话)。

但我也看到你的代码存在其他问题。例如,这一行:

string ldapUser = "OU=someGroup, DC=aa,DC=bb,DC=net";

用户应指明用户,但这仅表示OU。此外,还有一个空间。也许这只是一个糟糕的复制/粘贴,但我想我会指出它。

您还可以在路径中指明域的distinguishedName。如果域的DNS名称足够,我不记得了。

 string ldapPath = "LDAP://aa.bb.net/DC=aa,DC=bb,DC=net";