2012-01-03 13 views
7

Tengo una pregunta, honestamente, no estoy muy seguro de cómo preguntar. Esencialmente tengo un poco de código que funciona fantásticamente en mi máquina local cuando lo ejecuto. Una vez que lo publico en nuestro servidor web de desarrollo, falla. No estoy seguro de si se trata de un problema de configuración de IIS, problema de web.config o un problema de codificación.C# Active Directory Contexto/UserPrincipal.IsMemberOf error

Aquí está el fragmento de código

bool isMember = false; 

    PrincipalContext ADDomain = new PrincipalContext(ContextType.Domain); 
    UserPrincipal user = UserPrincipal.FindByIdentity(ADDomain, userID); 

    if (user.IsMemberOf(ADDomain, IdentityType.Name, groupName.Trim())) 
    { 
     isMember = true; 
    } 

    return isMember; 

Cuando yo paso en un nombre de usuario y un grupo y me dice si el usuario es un miembro de ese grupo. No hay problema. Funciona muy bien en mi máquina. Fui a publicar ese código al servidor web y se produce un error cuando se golpea la línea

UserPrincipal user = UserPrincipal.FindByIdentity(ADDomain, userID); 

que arroja este error:

[DirectoryServicesCOMException (0x80072020): An operations error occurred.]
System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail) +788
System.DirectoryServices.DirectoryEntry.Bind() +44
System.DirectoryServices.DirectoryEntry.get_AdsObject() +42
System.DirectoryServices.PropertyValueCollection.PopulateList() +29
System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry entry, String propertyName) +63
System.DirectoryServices.PropertyCollection.get_Item(String propertyName) +163 System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInitNoContainer() +521217
System.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit() +51
System.DirectoryServices.AccountManagement.PrincipalContext.Initialize() +141
System.DirectoryServices.AccountManagement.PrincipalContext.get_QueryCtx() +42
System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithTypeHelper(PrincipalContext context, Type principalType, Nullable`1 identityType, String identityValue, DateTime refDate) +29
System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(PrincipalContext context, String identityValue) +95
Cosmic.Web.Login.btnSubmit_Click(Object sender, EventArgs e) in C:\cosmic\Cosmic.Web\Login.aspx.cs:79
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +154
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3691

Cualquier idea que esto podría estar fallando?

Respuesta

17

Mi primera suposición sería: esa cuenta de usuario con la que está ejecutando este código no tiene los permisos necesarios para consultar Active Directory.

Para solucionar esto, básicamente, tiene que cambiar su constructor de esto:

PrincipalContext ADDomain = new PrincipalContext(ContextType.Domain); 

(establece una conexión con EA con las credenciales actuales, por defecto este código se ejecuta bajo)

a esto:

PrincipalContext ADDomain = 
    new PrincipalContext(ContextType.Domain, "DOMAIN", useraccount, password); 

y proporciona un nombre de usuario y contraseña para una cuenta de usuario que usted sabe que tiene suficientes privilegios t o consultar Active Directory.

+1

Ya sabes qué, eso es lo que era. El servidor web no tiene las credenciales correctas para acceder a Active Directory. Pon algunas credenciales allí y funciona bastante mejor. ¡Gracias! – Seril

Cuestiones relacionadas