我有一个使用System.DirectoryServices.AccountManagement类的.NET 3.5 Web应用程序。 当我search一些用户时,我得到一个PrincipalOperationException:从服务器返回一个引用。 如果我用自己的LDAP代码做了这个旧的学校方式,我可以启用追踪引荐。 我需要重写我的代码吗?
我的代码如下所示:
using (var principalContext = new PrincipalContext(ContextType.Domain, null, adPath)) { // Find the principal object for which you wish to enumerate group // membership. using (var userPrincipal = UserPrincipal.FindByIdentity(principalContext, identity)) { if (userPrincipal != null) { Name = userPrincipal.DisplayName; DistinguishedName = userPrincipal.DistinguishedName; EmailAddress = userPrincipal.EmailAddress; Sid = userPrincipal.Sid.Value; } } }
我的adPath可以是2个值之一。 其中一个值是最近join的域,可以使用不同的工具访问。 我相信这是如何.NET库进行LDAP调用的问题。
这是部分答案,因为评论太长。
根据这个微软文档 ,你甚至知道, 推荐是一个暗示,客户可以追逐。 但是关于RODC,他们添加了“ 例如,对于LDAP应用程序,如果在客户端和RODC之间的LDAP连接上启用了追逐引用,则应用程序不会知道客户端从RODC接收到引用。自动重定向到推荐中指定的可写域控制器。 “
所以我看看如何启用LDAP追赶在微软网站连接, 我发现这意味着ADSI使用。 我对答案非常感兴趣。
你是否尝试像这样查询全局目录:
/* Retreiving a principal context */ PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, "YourGCserver:3268", "dc=dom,dc=fr", "User", "Password");
它应该包含所有森林域的数据。 我希望它有帮助。
你是否尝试过表单的代码( 把域名作为第二个参数 ):
var principalContext = new PrincipalContext(ContextType.Domain, "office.local", "OU=Users, DC=office, DC=local" ))
另外请确保adPath
是从最具体到最不具体的。