我在从WinForm应用程序访问Active Directory时遇到一些问题。我想要的是从Active Directory创建用户和查询用户。
以下是查找用户的代码段:
public bool FindUser(string username)
{
using (PrincipalContext context = new PrincipalContext(
ContextType.Domain,
this.domainName,
this.DomainUserName,
this.DomainPassword))
{
UserPrincipal user = UserPrincipal.FindByIdentity(context, username);
return (user != null) ? true : false;
}
}
我无法根据给定的参数创建PrincipalContext
的对象。我得到了这个例外:
Exception: The server could not be contacted.
和内部异常表明,
Inner Exception: The LDAP server is unavailable.
域正在运行。我可以ping通它,也可以连接到这个域。
答案 0 :(得分:1)
您可以使用以下代码:
objectPath = "LDAP://CN=SC-5515_2,OU=Forus,DC=**MyDomainName**,DC=no";
public static bool Exists(string objectPath)
{
return DirectoryEntry.Exists(objectPath);
}
这是我用过的代码。如果Active Directory中存在任何对象,它可以正常进行测试。
答案 1 :(得分:1)
您可以尝试下一个代码。
public bool FindUser2(string userName)
{
try
{
DirectoryContext context = new DirectoryContext(
DirectoryContextType.Domain,
domainName,
domainName + @"\" + domainUserName,
domainPassword);
DirectoryEntry domainEntry = Domain.GetDomain(context).GetDirectoryEntry();
DirectorySearcher searcher = new DirectorySearcher(domainEntry,
"(|(objectCategory=user)(cn=" + domainUserName + "))");
SearchResult searchResult = searcher.FindOne();
return searchResult != null;
}
catch
{
return false;
}
}
答案 2 :(得分:0)
您还可以考虑使用System.DirectoryServices.Protocols访问其他域。有点陡峭的学习曲线,但速度更快,更灵活 - 例如你可以进行适当的异步搜索。