在此网站的答案帖子中找到了一份文档(here),但我无法与AD建立连接。当我使用像Active Directory资源管理器的程序,我可以连接。我想,因为我想连接到LDAPS,我需要一种不同的方法吗?
我有服务器IP,域名,用户名/密码和端口636。
我尝试了各种组合@ new DirectoryEntry
,但无法连接它。始终获得COMException Domain is not existing
。
static DirectoryEntry createDirectoryEntry()
{
DirectoryEntry ldapConnection = new DirectoryEntry("LDAP://192.168.2.59", USER, PWD);
ldapConnection.AuthenticationType = AuthenticationTypes.SecureSocketsLayer;
return ldapConnection;
}
背景信息: 用户将其卡片放入读卡器单元。 Porgram从卡中获取ID并在DB中搜索此ID并返回属于ID / User的eMail地址 。 这是工作解决方案:
private string getEmail(string userID)
{
try
{
string ldapfilter = "(&(otherPager=" + userID + "))";
DirectoryEntry myLdapConnection = new DirectoryEntry("LDAP://" + SERVER, USER, PWD);
DirectorySearcher search = new DirectorySearcher(myLdapConnection);
search.Filter = ldapfilter;
/*search.PropertiesToLoad.Add("mail");
SearchResult result = search.FindOne();*/
string[] requiredValue = new String[] { "mail" };
foreach (String value in requiredValue)
search.PropertiesToLoad.Add(value);
SearchResult result = search.FindOne();
if (result != null)
{
foreach (String value in requiredValue)
foreach (Object myCollection in result.Properties[value])
{
return myCollection.ToString();
}
}
else
{
return "No Entry fround";
}
}
catch (Exception e)
{
Console.WriteLine("Exception Problem: " + e.ToString());
return null;
}
return null;
}
private void cmdClose_Click(object sender, EventArgs e)
{
Close();
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
label1.Text = getEmail(textBox1.Text);
}
答案 0 :(得分:2)
您需要指定端口,因为636是默认的LDAPS端口。
new DirectoryEntry("LDAP://192.168.2.59:636", USER, PWD)
我在我的一些代码中执行此操作,使用“LDAP://”(而不是“LDAPS://”)是有效的。
如果这不起作用,则可能存在证书错误。您可以使用浏览器进行测试。如果您使用Chrome,请使用此功能打开Chrome(因此可以使用端口636):
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --explicitly-allowed-ports=636
然后转到https://192.168.2.59:636。如果您得到一个很大的花哨证书错误,那么问题是该证书不受信任。查看Chrome中的证书,看看问题所在。它可以由不在Windows证书库中的权限颁发。