C#,UserPrincipal.FindByIdentity总是抛出异常:“服务器发送引用”或未知0x80005000

时间:2013-08-27 08:52:43

标签: c# userprincipal

我花了一整天而一无所获。我正在开发一个使用域用户/密码进行身份验证的Web应用程序。遵循代码。上半部分没问题,我可以得到输出:“用户和传递是:真的。”

然后,UserPrincipal.FindByIdentity抛出错误,“服务器发送引用”或“未知0x80005000”。我多次改变连接参数,如: LDAP:// CN =用户,DC = SBI,DC = COM

CN =用户,DC = SBI,DC = COM

DC = SBI,DC = COM

对于每一个,前半部分代码是正确的,我可以让我的用户/通过成功验证。但我无法获得userPrincipal。

我搜索了很多但仍然没有得到任何结果,有人请求帮助。

    bool valid = false;
    using (PrincipalContext context = new PrincipalContext(ContextType.Domain, "sbi.com", "LDAP://CN=Users,DC=sbi,DC=com"))
    {
        valid = context.ValidateCredentials(user, pass);
        System.Diagnostics.Debug.WriteLine("the user and pass is: " + valid.ToString());
    }
    //return;
    if (valid)
    {
        PrincipalContext context2 = new PrincipalContext(ContextType.Domain,
            "sbi.com", "CN=Users,DC=sbi,DC=com",
            ContextOptions.Negotiate | ContextOptions.Signing | ContextOptions.Sealing,
            user, pass);


        //System.Diagnostics.Debug.WriteLine("connected server:" + context2.ConnectedServer);

        UserPrincipal userInDomain = UserPrincipal.FindByIdentity(context2, user);
        if (userInDomain != null)
        {
            System.Diagnostics.Debug.WriteLine("user found: " + userInDomain.Name);
        }
        else
        {
            System.Diagnostics.Debug.WriteLine("user not found");
        }
    }

1 个答案:

答案 0 :(得分:0)

我只是搞清楚了。如果我没有指定容器字符串,它就会工作。容器字符串可能有问题。