LDAP与域的连接不正常
本文关键字:连接 不正常 LDAP | 更新日期: 2023-09-27 18:16:12
我正在与域的LDAP连接作斗争。我在VM上有一个Windows Server 2012 R2数据中心连接是桥接的,并与本地网络复制。
我想创建一个工具,使我可以看到用户名,prename,名称等…到目前为止,我已经把一切都建立起来了。但是当我搜索一个用户时它显示:
类型的第一次机会异常"System.Runtime.InteropServices。COMException'发生在System.DirectoryServices.dll附加信息:The Server is not full function .
如果有此异常的处理程序,程序可能是安全的继续。
下面是我的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.DirectoryServices;
using System.DirectoryServices.ActiveDirectory;
using System.Net;
using System.Security.Permissions;
namespace Manu_Tool.DomainServices{
class GetterServices{
DirectoryEntry DE = new DirectoryEntry("LDAP://testdomain.com/DC=testdomain, DC=com", "admin", "P@ssw0rd", AuthenticationTypes.Secure);
public String getUsername (string username){
DirectorySearcher ds = new DirectorySearcher(DE, "objectClass=User", null, SearchScope.Subtree);
ds.Filter = "(&((&(objectCategory=Person)(objectClass=User)))(samaccountname=" + username + "))";
SearchResult sr = ds.FindOne();
return sr.ToString();
}
}
}
停在SearchResult sr = ds.FindOne();
我可以ping通服务器,防火墙被禁用。
域名:testdomain.com
登录:管理员
通过:P@ssw0rd
主机名:testserver
哪里出了问题?
这只是获取用户名的代码。
正如我在上面的评论中提到的,您的代码对我来说似乎运行得很好。尽管这是我目前在我的一个应用程序中从Active Directory提取用户信息的方式。试试它,看看它是否有助于你的情况。
添加System.DirectoryServices.AccountManagement
参考
Principal savedUser; ;
PrincipalContext pc = new PrincipalContext(ContextType.Domain, "domain.com", "domainUser", "password");
UserPrincipal user = new UserPrincipal(pc);
user.SamAccountName = "username";
PrincipalSearcher searcher = new PrincipalSearcher(user);
savedUser = searcher.FindOne();
通常这些语句将被包装在using
语句中,但是您不能返回一个已处置的对象。
我现在可以修复它。这是我的工作代码:
namespace ADM
{
class GetterSevice
{
static string path = "LDAP://DC=testdomain, DC=com";
static DirectoryEntry DE = new DirectoryEntry(path, null, null, AuthenticationTypes.Secure);
DirectorySearcher ds = new DirectorySearcher(DE, "objectClass=User", null, SearchScope.Subtree);
public string getUsername(string username)
{
string finalResult = "";
ds.Filter = "(&((&(objectClass=User)(objectCategory=person)))(SAMAccountName=" + username + "))";
SearchResultCollection src = ds.FindAll();
foreach (SearchResult sr in src)
{
DirectoryEntry result = new DirectoryEntry();
result = new DirectoryEntry(sr.Path);
finalResult = (result.InvokeGet("SAMAccountName")).ToString();
}
return finalResult;
}
谢谢你的帮助