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

哪里出了问题?

这只是获取用户名的代码。

LDAP与域的连接不正常

正如我在上面的评论中提到的,您的代码对我来说似乎运行得很好。尽管这是我目前在我的一个应用程序中从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;
        }

谢谢你的帮助