2011-09-27 23 views
10

Estoy intentando utilizar PrincipalContext para un servicio web que estoy desarrollando. Ya he estado usando autenticación de formularios en el servidor web en una aplicación diferente y funciona bien.PrincipalContext no conectando

El error que estoy recibiendo es:

System.DirectoryServices.AccountManagement.PrincipalServerDownException: The server could not be contacted. ---> System.DirectoryServices.Protocols.LdapException: The LDAP server is unavailable. 
    at System.DirectoryServices.Protocols.LdapConnection.Connect() 
    at System.DirectoryServices.Protocols.LdapConnection.SendRequestHelper(DirectoryRequest request, Int32& messageID) 
    at System.DirectoryServices.Protocols.LdapConnection.SendRequest(DirectoryRequest request, TimeSpan requestTimeout) 
    at System.DirectoryServices.Protocols.LdapConnection.SendRequest(DirectoryRequest request) 
    at System.DirectoryServices.AccountManagement.PrincipalContext.ReadServerConfig(String serverName, ServerProperties& properties) 
    --- End of inner exception stack trace --- 
    at System.DirectoryServices.AccountManagement.PrincipalContext.ReadServerConfig(String serverName, ServerProperties& properties) 
    at System.DirectoryServices.AccountManagement.PrincipalContext.DoServerVerifyAndPropRetrieval() 
    at System.DirectoryServices.AccountManagement.PrincipalContext..ctor(ContextType contextType, String name, String container, ContextOptions options, String userName, String password) 
    at System.DirectoryServices.AccountManagement.PrincipalContext..ctor(ContextType contextType, String name, String container, String userName, String password) 
    at webService.Service1.ValidUser(String sUserName) in E:\Development\CSharpApps\Desktop\OrgChart\webService\Service1.asmx.cs:line 158 

Nuestro servidor web se encuentra en la zona desmilitarizada y accede al dominio a través del firewall. Estoy usando la información del puerto, etc., como a continuación, para un ejemplo.

Esto funciona usando el ip de mi caja de desarrollo, sin embargo, está dentro del firewall. La información de IP que le estoy enviando es la misma que la que uso dentro de la autenticación de formularios web.

PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "192.168.1.1:389", "dc=doodlie,dc=com",@"doodlie\admin","doodliesquat"); 
+0

Una pregunta similar está aquí: http://stackoverflow.com/questions/1023489/error-while-trying-to-connect-ad-using-ldap-connection – mmcglynn

Respuesta

0

Independientemente de la cuestión, la instalación de algunas de estas herramientas muy valiosas para la EA admin/solución de problemas han sido una bendición de Dios para mí.

De ser posible, instale Herramientas de administración remota del servidor (RSAT) en su máquina/o el servidor web (si está permitido) y luego use el cliente de usuarios y computadoras de Active Directory para determinar la URL/IP exacta de su DC. Si no puede conectarse utilizando estas herramientas que podrían ser un punto de partida para escalar a soporte de TI/dev ops

Además de esto, la cuenta de servicio/AD en la que se ejecuta la aplicación de sitio web puede no tener suficientes privilegios para acceder al CORRIENTE CONTINUA. He tenido éxito con

using (HostingEnvironment.Impersonate()) { // code in here. }

El grupo de aplicaciones de la aplicación web se ejecuta bajo en IIS debe ejecutarse bajo una cuenta de usuario que tiene privilegios apropiados. (No sólo tiene que ser servicio de red)

0

En mi caso la eliminación de número de puerto de URL trabajaron

0

Tal vez me falta algo, pero en realidad no tiene que especificar el servidor de anuncios, puede simplemente diga:

PrincipalContext ctx = new PrincipalContext(ContextType.Domain); 

Y debe encontrar cualquier DC en el dominio actual de la aplicación que pueda encontrar. Si se trata de una red con tolerancia a fallas, cuando una está inactiva, la otra debería retomarla. No estoy seguro de por qué habría una razón para golpear uno, específicamente, como lo hace el código en la pregunta original, a menos que esté en un dominio diferente. Si ese es el caso, puede intentar hospedar su servicio web en ese dominio y usar DNS y un reenviador para llamar/enrutar a la nueva IP de su servicio web en el nuevo dominio, si es necesario, o usar una entrada de archivo Hosts. , o simplemente consulte el servicio web por IP.