我正在使用ASP.Net实现LAD请求。我有这种方法,它第一次被称为魅力:
public static ADUser GetUser(string userName)
{
using (var context = new PrincipalContext(ContextType.Domain, ActiveDirectoryHelper.ApplicationDomain))
{
using (var searcher = new DirectorySearcher())
{
var internalUserName = userName.Replace("@" + ActiveDirectoryHelper.ApplicationDomain, "");
var filter = string.Format("(&(objectCategory=person)(objectClass=user)(anr={0}))", internalUserName);
searcher.Filter = filter;
var user = searcher.FindOne();
var adUser = MapToUserModel(user);
return adUser;
}
}
}
之后,它使用完全相同的过滤器抛出以下异常:
<00> 000004DC:LdapErr:DSID-0C0906E8,评论:为了执行此操作 操作成功绑定必须在连接。,数据上完成 0,v1db1
答案 0 :(得分:0)
我不认为错误来自您粘贴的代码。
此LDAP错误意味着您未绑定到服务器,因此无法执行操作。
在LDAP中,你必须:
。
之后,如果关闭绑定会话,则必须重新绑定以执行其他操作,或者如果要执行多个操作,则不必在第一个操作之后解除绑定。
LDAP是一种有状态协议,这意味着在完成connect + bind之后,您将进入一个会话,您可以在该会话中执行所需的操作,而无需重新绑定/重新连接。
答案 1 :(得分:0)
为后人。 我最终找到了对我答案的回应。我开始将LDAP查询称为异步调用。我意识到.NET运行时执行异步调用到Web环境的方式。无论如何,我通过同步和Voilà改变了我的异步调用!神奇的事情发生了。
我想知道的是幕后发生的事情。为什么异步调用会影响LDAP查询。
感谢Esteban的回答。