Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LDAP第二次搜索引发了不同上下文的异常_C#_Asp.net_Active Directory_Ldap - Fatal编程技术网

C# LDAP第二次搜索引发了不同上下文的异常

C# LDAP第二次搜索引发了不同上下文的异常,c#,asp.net,active-directory,ldap,C#,Asp.net,Active Directory,Ldap,我正在使用ASP.Net实现LAD请求。我有一个方法,第一次调用它时,它就像一个符咒: public static ADUser GetUser(string userName) { using (var context = new PrincipalContext(ContextType.Domain, ActiveDirectoryHelper.ApplicationDomain)) { using (var searcher = new DirectoryS

我正在使用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;
        }
    }
}
之后,它将使用完全相同的筛选器抛出以下异常:

000004DC:LDAPPER:DSID-0C0906E8,注释:为了执行此操作 操作必须在连接数据上完成成功绑定 0,v1db1


我不认为错误来自你粘贴的代码

此LDAP错误表示您未绑定到服务器,因此无法执行该操作

在LDAP中,您必须:

  • 连接(如网络连接)到服务器
  • 向服务器进行身份验证(使用绑定操作)
在提出请求之前

在此之后,如果关闭绑定会话,则必须重新绑定以执行另一个操作,或者如果要执行多个操作,则在第一个操作之后不要解除绑定

LDAP是一种有状态协议,这意味着在连接+绑定完成后,您可以在会话中执行任意多的操作,而无需重新绑定/重新连接。

面向后代。 我最终找到了答案的答案。我开始将LDAP查询调用为异步调用。我意识到.NET运行时在web环境中执行异步调用的方式。不管怎样,我通过同步调用改变了我的异步调用,瞧!奇迹发生了

我想知道的是幕后发生了什么。异步调用影响LDAP查询的原因

谢谢你的回答