Este dilema se puede resolver de variadas formas, pero en este caso te dejamos la que para nosotros es la solución más completa.
Solución:
Tuve lo mismo una y otra vez y nada parecía ayudar.
Cambiando la ruta de ldap://
para LDAP://
Hizo el truco.
Es un problema de permisos.
Cuando ejecuta la aplicación de la consola, esa aplicación se ejecuta con sus credenciales, por ejemplo, como “usted”.
¿Dónde se ejecuta el servicio WCF? ¿En IIS? Lo más probable es que se ejecute en una cuenta separada, que no tiene permiso para consultar Active Directory.
Puede intentar que funcione la suplantación de WCF, de modo que se transmitan sus propias credenciales, o puede especificar un nombre de usuario/contraseña al crear su DirectoryEntry:
DirectoryEntry directoryEntry =
new DirectoryEntry("LDAP://someserver.contoso.com/DC=contoso,DC=com",
userName, password);
De acuerdo, es posible que no sean las credenciales después de todo (eso suele ser el caso en más del 80% de los casos que veo).
¿Qué hay de cambiar su código un poco?
DirectorySearcher directorySearcher = new DirectorySearcher(directoryEntry);
directorySearcher.Filter = string.Format("(&(objectClass=user)(objectCategory=user) (sAMAccountName=0))", username);
directorySearcher.PropertiesToLoad.Add("msRTCSIP-PrimaryUserAddress");
var result = directorySearcher.FindOne();
if(result != null)
if(result.Properties["msRTCSIP-PrimaryUserAddress"] != null)
var resultValue = result.Properties["msRTCSIP-PrimaryUserAddress"][0];
Mi idea es: ¿por qué no decirle a la DirectorySearcher
de buenas a primeras que attribute te interesa? Entonces no necesita hacer otro paso adicional para obtener el DirectoryEntry
desde el resultado de la búsqueda (debería ser más rápido), y dado que le dijo al buscador de directorios que encontrara esa propiedad, ciertamente se cargará en el resultado de la búsqueda, así que a menos que sea null (sin valor establecido), entonces debería poder recuperarlo fácilmente.
Bagazo
En el contexto de Ektron, este problema se resuelve instalando la función “Compatibilidad con Metabase IIS6” en Windows:
Verifique ‘Características de Windows’ o ‘Servicios de rol’ para la compatibilidad con la metabase de IIS6, agregue si falta:
Referencia: https://portal.ektron.com/KB/1088/
Si te ha resultado útil nuestro artículo, te agradeceríamos que lo compartas con más entusiastas de la programación y nos ayudes a difundir esta información.