2016-01-06 55 views
1

我需要根据Active Directory对用户进行身份验证。在Visual Studio以及LinqPad中运行相同的代码。 LinqPad工作正常,但是在Visual Studio中,它有一个非常有益的未知的错误错误,堆栈跟踪如下:Active Directory Linqpad vs Visual Studio

System.DirectoryServices.Protocols.LdapException: A local error occurred.  
    at System.DirectoryServices.Protocols.LdapConnection.BindHelper(NetworkCredential newCredential, Boolean needSetCredential)  
    at System.DirectoryServices.AccountManagement.CredentialValidator.lockedLdapBind(LdapConnection current, NetworkCredential creds, ContextOptions contextOptions)  
    at System.DirectoryServices.AccountManagement.CredentialValidator.BindLdap(NetworkCredential creds, ContextOptions contextOptions)  
    at System.DirectoryServices.AccountManagement.CredentialValidator.Validate(String userName, String password)  
    at System.DirectoryServices.AccountManagement.PrincipalContext.ValidateCredentials(String userName, String password) 

是两个,但只在LinqPad运行的代码是:

using (System.DirectoryServices.AccountManagement.PrincipalContext pc = new System.DirectoryServices.AccountManagement.PrincipalContext(System.DirectoryServices.AccountManagement.ContextType.Domain)) 
{ 
    return pc.ValidateCredentials("SomeName", SomePassword"); 
} 

我也在VS之外运行了exe,不管是否使用Admin,也使用cmd行中的runas。 如果任何人有任何知识,为什么这些行为不同,那么将非常感激。

回答

1

试着改变你的代码,这个我试过这个本地,远程服务器和两个工作

上,这意味着如果用户是零,他们没有在AD中发现

string fullName = null; 
using (PrincipalContext context = new PrincipalContext(ContextType.Domain)) 
{ 
    using (UserPrincipal user = UserPrincipal.FindByIdentity(context,"your domain username goes here")) 
    { 
     if (user != null) 
     { 
      fullName = user.DisplayName; 
     } 
    } 
}