如何克服ActiveDirectory搜索中的延迟绑定我有一个根据用户名和域检索用户全名的功能。此函数在模拟用户下的ASP.NET线程中运行。当我在远程AD分支上使用DirectoryFinder时,我相信我得到的是SID号而不是属性(无法验证它在另一个盒子上)。publicstringGetUserFullName(stringuserName,stringdomainName){DirectoryEntryrootEntry=newDirectoryEntry("GC://dc=company,dc=net");stringfilter=string.Format("(&(objectCategory=person)(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2))(userPrincipalName={0}@{1}.company.net))",用户名,域名);DirectorySearchersearcher=newDirectorySearcher(rootEntry,filter,newstring[]{"displayName"});rootEntry.AuthenticationType=AuthenticationTypes.Secure;searcher.PageSize=1000;searcher.ServerTimeLimit=newTimeSpan(0,10,0);searcher.ReferralChasing=ReferralChasingOption.All;搜索者.Asynchronous=false;SearchResult结果=searcher.FindOne();if(result!=null){return(string)result.Properties["displayName"][0];}else{thrownewException("ActiveDirectory无法解析您的用户名");您使用的是什么版本的.NET框架?AD的东西在.NET3.5中得到了相当广泛的改进,并且有针对用户和组的强类型结构,现在看起来像这样。查看我的好友JoeKaplan和EthanWilansky的优秀MSDN文章“ManagingDirectorySecurityPrincipalsin.NETFramework3.5”。真的很棒的东西。首先,您将获得一个名为UserPrincipal的类,它是强类型的,例如所有原始属性都是对象的属性。很有帮助。其次,使用PrincipalSearcher获得一个不错的“按示例查询”方法-查看Joe和Ethan的文章中的这个示例://创建主体对象表示来描述//将搜索的内容UserPrincipaluser=newUserPrincipal(adPrincipalContext);//定义搜索的属性(这可以使用通配符)user.Enabled=false;user.Name="用户*";//创建一个主要搜索器以运行搜索操作PrincipalSearcherpS=newPrincipalSearcher();//为您创建的主体对象分配查询过滤器属性//您也可以在//PrincipalSearcher构造函数中传递用户主体pS.QueryFilter=user;//运行查询PrincipalSearchResultresults=pS.FindAll();Console.WriteLine("禁用以'user'开头的帐户:");foreach(结果中的主要结果){Console.WriteLine("name:{0}",result.Name);如果有任何机会,请尝试使用.NET3.5来获取AD内容!Scum我将AD包装成一个方便的帮助程序库,并始终使用此方法://////返回指定用户ID的AD信息。/////////publicADUserGetUser(stringntID){DirectorySearchersearch=newDirectorySearcher();search.Filter=String.Format("(cn={0})",ntID);search.PropertiesToLoad.Add("邮件");search.PropertiesToLoad.Add("givenName");search.PropertiesToLoad.Add("sn");search.PropertiesToLoad.Add("显示名称");search.PropertiesToLoad.Add("userPrincipalName");search.PropertiesToLoad.Add("cn");SearchResult结果=search.FindOne();返回新的ADUser(结果);ADUser是一个将SearchResult映射到强类型属性的自定义类我不确定您的具体问题是什么,但这对我一直有效。编辑:比较我们的代码,我看到你没有告诉搜索预加载属性......这可能是你的问题。以上就是C#学习教程的全部内容:如何克服ActiveDirectory搜索中的后期绑定。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
