我正在与我与域的LDAP连接作斗争。 我在VM连接上安装了Windows Server 2012 R2 Datacenter,并与本地网络进行桥接和复制。
我想创建一个工具,让我可以看到用户名,名字,姓名等...到目前为止,我已经建立了所有内容。但是,当我尝试搜索用户时,它说:
类型的第一次机会异常 发生'System.Runtime.InteropServices.COMException' System.DirectoryServices.dll程序
其他信息:服务器无法正常运行。
如果存在此异常的处理程序,则程序可能是安全的 继续进行。
继承我的代码:
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
可能出了什么问题?
这只是获取用户名的代码。
答案 0 :(得分:0)
正如我在上面的评论中提到的,您的代码似乎对我来说运行良好。虽然这是我目前从我的一个应用程序中的Active Directory中提取用户信息的方式。试一试,看看它是否有助于你的情况。
添加routes.MapRoute(
"customRouteName",
"aspnet/introduction-To-AspNet",
new { controller = "AspNet", action = "Introduction" });
参考。
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();
语句中,但您不能返回已处置的对象。
答案 1 :(得分:0)
我现在可以解决它。这是对我有用的代码:
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;
}
谢谢你的帮助