.net iis active-directory directoryservices

.net - System.DirectoryServices.DirectoryServicesCOMException: se produjo un error de operaciones



iis active-directory (7)

Tengo la misma aplicación web que funciona en otros tres servidores. ¿Alguien tiene alguna idea de por qué no funciona en el 4º servidor? Ver el error y stacktrace:

Se produjo un error de operaciones.

Descripción: se produjo una excepción no controlada durante la ejecución de la solicitud web actual. Revise el seguimiento de la pila para obtener más información sobre el error y dónde se originó en el código.

Detalles de la excepción:
System.DirectoryServices.DirectoryServicesCOMException: se ha producido un error de operaciones.

Error de fuente:

Se generó una excepción no controlada durante la ejecución de la solicitud web actual. La información sobre el origen y la ubicación de la excepción se puede identificar utilizando el seguimiento de pila de excepción a continuación.

Stack Trace:

[DirectoryServicesCOMException (0x80072020): se produjo un error de operaciones. ] System.DirectoryServices.DirectoryEntry.Bind (Boolean throwIfFail) +454 System.DirectoryServices.DirectoryEntry.Bind () +36 System.DirectoryServices.DirectoryEntry.get_AdsObject () +31 System.DirectoryServices.PropertyValueCollection.PopulateList () +22
System.DirectoryServices.PropertyValueCollection..ctor (entrada DirectoryEntry, String propertyName) +96
System.DirectoryServices.PropertyCollection.get_Item (String propertyName) +142 System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInitNoContainer () +1134 System.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit () +37 System.DirectoryServices.AccountManagement.PrincipalContext.Initialize () +124 System.DirectoryServices.AccountManagement.PrincipalContext.get_QueryCtx () +31 System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithTypeHelper (PrincipalContext context, Type principalType, Nullable''1 identityType, String identityValue, DateTime refDate) +14
System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithType (PrincipalContext context, Type principalType, String identityValue) +73
System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity (PrincipalContext context, String identityValue) +25
Infraero.TINE3.STTEnterprise.Web.Common.Seguranca.ServicoAutenticacao.EfetuarLogin (AcessoUsuario acessoUsuario, String senha) en D: / SVN / STT / trunk / 4-0_CodigoFonte_Enterprise / 4-4_SRC / Infraero.TINE3.STTEnterprise.Web / Common / Seguranca / ServicoAutenticacao.cs: 34 Infraero.TINE3.STTEnterprise.Web.Controllers.LoginController.ValidarUsuarioAD (String matricula, String senha, AcessoUsuario acessoUsuario) en D: / SVN / STT / trunk / 4-0_CodigoFonte_Enterprise / 4-4_SRC / Infraero. TINE3.STTEnterprise.Web / Controllers / LoginController.cs: 92 Infraero.TINE3.STTEnterprise.Web.Controllers.LoginController.ValidarUsuario (String matricula, String senha) en D: / SVN / STT / trunk / 4-0_CodigoFonte_Enterprise / 4-4_SRC / Infraero.TINE3.STTEnterprise.Web / Controllers / LoginController.cs: 80 Infraero.TINE3.STTEnterprise.Web.Controllers.LoginController.Index (LoginViewModel loginViewModel) en D: / SVN / STT / trunk / 4-0_CodigoFonte_Enterprise / 4-4_SRC / Infraero.TINE3.STTEnterprise.Web / Controllers / LoginController.cs: 54 lambda_method (Cierre, Controll erBase, Object []) +108
System.Web.Mvc.ActionMethodDispatcher.Execute (Controlador ControllerBase, Object [] parámetros) +17
System.Web.Mvc.ReflectedActionDescriptor.Execute (ControllerContext controllerContext, IDictionary''2 parameters) +208
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod (ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary''2 parameters) +27
System.Web.Mvc. <> C__DisplayClass15.b__12 () +55 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter (filtro IActionFilter, ActionExecutingContext preContext, Func''1 continuación) +263
System.Web.Mvc. <> C__DisplayClass17.b__14 () +19 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters (ControllerContext controllerContext, filtros IList''1, ActionDescriptor actionDescriptor, parámetros IDictionary`2) +191
System.Web.Mvc.ControllerActionInvoker.InvokeAction (ControllerContext controllerContext, String actionName) +343
System.Web.Mvc.Controller.ExecuteCore () +116
System.Web.Mvc.ControllerBase.Execute (RequestContext requestContext) +97 System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute (RequestContext requestContext) +10
System.Web.Mvc. <> C__DisplayClassb.b__5 () +37
System.Web.Mvc.Async. <> C__DisplayClass1.b__0 () +21
System.Web.Mvc.Async. <> C__DisplayClass8''1.b__7 (IAsyncResult _) +12 System.Web.Mvc.Async.WrappedAsyncResult''1.End () +62 System.Web.Mvc. <> C__DisplayClasse.b__d ( ) +50
System.Web.Mvc.SecurityUtil.b__0 (Acción f) +7 System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust (Acción de acción) +22 System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) +60
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest (resultado de IAsyncResult) +9
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () +8963149 System.Web.HttpApplication.ExecuteStep (paso IExecutionStep, booleano y completado sincrónicamente) +184

Método EfetuarLogin:

public static bool EfetuarLogin(User user, string password) { bool isValid = false; if (user != null) { PrincipalContext context = new PrincipalContext(ContextType.Domain); using (context) { isValid = context.ValidateCredentials(user.Login, password); if (isValid) { UserPrincipal userAD = UserPrincipal.FindByIdentity(context, user.Login); MySession.CurrentUser = new MyUserSession() { Id = user.Id, ProfileId = user.ProfileId , Login = user.Login , Name = userAD.Name }; } } } return isValid; }


1 - Cambiar el grupo de aplicaciones para que se ejecute en el Servicio de red.
2 - Haga clic en Autenticación e inhabilite la suplantación ASP.Net.


En mi caso, cambiar de ApplicationPoolItentity a NetworkService en el grupo de aplicaciones funcionó, PERO no se prefirió "porque los servicios que se ejecutan como servicio de red pueden alterar otros servicios que se ejecutan bajo la misma identidad" en el siguiente enlace: ( iis.net/learn/manage/configuring-security/… ).

support.microsoft.com/kb/2545850 la revisión ( support.microsoft.com/kb/2545850 ) en el servidor y reinicié por esta respuesta :( DirectoryServicesCOMException 80072020 del sitio de IIS 7.5 que se ejecuta bajo ApplicationPoolIdentity )

Parece que está funcionando bien ahora.

Antecedentes de mi tarea: actualizar aplicaciones de .NET Framework 2.0 en Server 2003 a .NET Framework 4.0 en Server 2008 R2.


Entonces, si coloca un punto de interrupción en la línea:

UserPrincipal userAD = UserPrincipal.FindByIdentity(context, user.Login);

y paso a través, genera la excepción anterior que no tiene ninguna InnerExceptions?

De acuerdo con el seguimiento de la pila, esa línea es el comienzo del problema. La excepción devuelta debe contener al menos otra información sobre por qué fue lanzada.

Concatenador InnerException

El siguiente método toma la excepción de nivel superior y devuelve una pestaña y un desglose de formato de salto de línea de las excepciones internas como una cadena.

private static string InnerExceptionConcatenator(Exception ex, int tabTracker = 0) { string retVal = ""; if (ex.InnerException != null) { tabTracker ++; retVal = string.Format( "{0}/r/n{1}{2}", ex.Message, new String(''/t'', tabTracker), InnerExceptionConcatenator(ex.InnerException)); } else { retVal = ex.Message; } return retVal; }

Puedes llamarlo así:

try { } catch(ex Exception) { var exceptionString = InnerExceptionConcatenator(ex); var path = @"c:/temp/exception.txt"; if (!File.Exists(path)) { using (StreamWriter sw = File.CreateText(path)) { sw.WriteLine(exceptionString); } } else { using (StreamWriter sw = File.AppendText(path)) { sw.WriteLine(exceptionString); } } }


Mi experiencia fue un poco diferente con este error. Tuve que mover la aplicación local a Azure, donde la llamada LDAP estaba sucediendo desde el lugar, pero no desde Azure incluso después de abrir el firewall requerido.

Probé todas las soluciones mencionadas anteriormente, pero ninguna fue útil. El servicio de red ya estaba seleccionado en Azure VM.

Después de muchos golpes y pruebas e investigaciones. Lo arreglé.

Solución: el servidor local tenía permiso para acceder a LDAP y no necesitaba Nombre de usuario ni Contraseña. Pero en Azure, debe realizar específicamente una llamada LDAP con nombre de usuario y contraseña. A continuación está el código que ayudó.

var directoryEntry= new DirectoryEntry(adspath, Username, Password)


No hay una InnerException en este caso, solo está envolviendo un error COM.

Es casi seguro que se deba a que su identidad del grupo de aplicaciones no tiene permiso para acceder a Active Directory .


Sé que este tema es antiguo, pero solo para las personas futuras que buscarán este problema. Solo use este método para ejecutar el código con privilegios de Elevate.

using (HostingEnvironment.Impersonate()) { // This code runs as the application pool user }


Tuve exactamente el mismo error y lo solucioné al cambiar el grupo de aplicaciones del sitio para que se ejecutara bajo el servicio de red.

En IIS:

  • Seleccione el grupo de aplicaciones de su sitio
  • Seleccione Configuración avanzada en el lado derecho
  • En la ventana emergente Configuración avanzada, desplácese hacia abajo al grupo Modelo de proceso
  • Cambie la primera opción llamada Identity to NetworkService (la mía se estableció en la ApplicationPoolIdentity predeterminada).

Espero que esto ayude.