2011-08-05 43 views
18
DirectoryEntry oDE = new DirectoryEntry("LDAP://DC=Test1,DC=Test2,DC=gov,DC=lk"); 

using (DirectorySearcher ds = new DirectorySearcher(oDE)) 
{ 
    ds.PropertiesToLoad.Add("name"); 
    ds.PropertiesToLoad.Add("userPrincipalName"); 

    ds.Filter = "(&(objectClass=user))"; 

    SearchResultCollection results = ds.FindAll(); 

    foreach (SearchResult result in results) 
    { 
     Console.WriteLine("{0} - {1}", 
      result.Properties["name"][0].ToString(), 
      result.Properties["userPrincipalName"][0].ToString()); 
    } 
} 

En la línea SearchResultCollection results = ds.FindAll(); consigo una excepción:"ha devuelto una referencia desde el servidor" excepción al acceder AD desde C#

ha devuelto una referencia desde el servidor

Por qué ¿obtengo esa excepción y qué significa?

+0

¿Cuál es la pregunta? – stack72

+0

¿Alguna idea de por qué estoy recibiendo esta excepción? – Roshe

Respuesta

2

Esta es la respuesta a la pregunta.

try 
    { 
     string adServer = ConfigurationManager.AppSettings["Server"]; 
     string adDomain = ConfigurationManager.AppSettings["Domain"]; 
     string adUsername = ConfigurationManager.AppSettings["AdiminUsername"]; 
     string password = ConfigurationManager.AppSettings["Password"]; 
     string[] dc = adDomain.Split('.'); 
     string dcAdDomain = string.Empty; 

     foreach (string item in dc) 
     { 
      if (dc[dc.Length - 1].Equals(item)) 
       dcAdDomain = dcAdDomain + "DC=" + item; 
      else 
       dcAdDomain = dcAdDomain + "DC=" + item + ","; 
     } 

     DirectoryEntry de = new DirectoryEntry("LDAP://" + adServer + "/CN=Users," + dcAdDomain, adUsername, password); 

     DirectorySearcher ds = new DirectorySearcher(de); 

     ds.SearchScope = SearchScope.Subtree; 

     ds.Filter = "(&(objectClass=User)(sAMAccountName=" + username + "))"; 

     if (ds.FindOne() != null) 
      return true; 
    } 
    catch (Exception ex) 
    { 
     ExLog(ex); 
    } 
    return false; 
+0

Entonces, ¿cuál era el problema? – Pakman

+18

-1 porque no hay ninguna indicación sobre qué resolvió el problema. – Rossini

+7

Mi cadena LDAP estaba mal. – Roshe

3

Es posible que también deba habilitar ReferralChasing en el DirectorySearcher - http://msdn.microsoft.com/en-us/library/ms180884(VS.80).aspx.

+1

¿Tiene alguna idea sobre * por qué * se devuelve una referencia? Pensé que al no especificar un DC, se uniría automáticamente a uno que tenga la información. –

+3

@Brian: sigo recibiendo la misma excepción incluso si utilizo su sugerencia. – Roshe

+0

No sé por qué volvió una recomendación. – Roshe

9

Una referencia es enviada por un servidor AD cuando no tiene la información solicitada, pero sabe que otro servidor tiene la información. Suele aparecer en un entorno de confianza donde un DC puede referirse a un DC en un dominio de confianza.

En su caso, usted solo está especificando un dominio, confiando en la búsqueda automática de qué controlador de dominio usar. Creo que deberías intentar averiguar qué controlador de dominio se utiliza para la consulta y ver si esa contiene realmente la información solicitada.

Si proporciona más información sobre la configuración de su AD, incluidos los trusts/subdominios, los catálogos globales y los registros de recursos DNS para los controladores de dominio, le será más fácil ayudarlo.

+0

¿Quiere decir que necesito usar una credencial de cuenta que tenga acceso al AD cuando cree DirectoryEntry? alguien sugiere que necesito usar una cuenta autorizada para acceder a AD. ¿Lo es? – Roshe

+0

Estoy intentando acceder al anuncio de un tercero externo y no sé detalles sobre la configuración de su servidor. si sugiere qué detalles particulares son necesarios, entonces puedo solicitarles que necesite estos detalles para acceder a su anuncio y consultar para la existencia de un usuario en particular. hemos otorgado todos los derechos para acceder a su AD, no pude simplemente porque mi falta de conocimiento técnico AD. – Roshe

1

ha devuelto una referencia a partir del error del servidor por lo general significa que la dirección IP no es recibido por el dominio que se proporciona en la cadena de conexión. Para más detalles, véase este enlace:

Referral was returned AD Provider

2

tenían el mismo problema y logró resolverlo.

En mi caso, tenía un grupo de AD en el dominio de inicio de sesión actual con miembros (usuarios) de un subdominio. El servidor en el que ejecutaba el código no podía acceder al controlador de dominio del subdominio (el servidor nunca antes había necesitado acceder al subdominio).

que luchaban por un tiempo ya que mi PC de escritorio podrían acceder al dominio así que todo parecía OK en el complemento MMC (usuarios de Active Directory & Informática).

Espero que ayude a alguien más.

+0

Cuando vio el error, ¿fue solo cuando buscaba usuarios de subdominios? – ChaseMedallion

+0

Fue solo cuando intenté obtener los miembros de un grupo en el dominio principal que incluía usuarios del subdominio. – Will

1

Sé que esto puede sonar tonto, pero recientemente me encontré con esto, asegúrese de que el controlador de dominio no sea de solo lectura.

Cuestiones relacionadas