System.DirectoryServices.DirectoryServicesCOMException:发生操作错误

Vin*_*oni 41 .net iis directoryservices active-directory

我在其他三台服务器上使用相同的Web应用程序.任何人都知道为什么不在第四台服务器上工作?查看错误和堆栈跟踪:

发生了操作错误.

描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.

异常详细信息:
System.DirectoryServices.DirectoryServicesCOMException:发生操作错误.

来源错误:

在执行当前Web请求期间生成了未处理的异常.可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息.

堆栈跟踪:

[DirectoryServicesCOMException(0x80072020):发生操作错误.] 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(DirectoryEntry entry,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.AccountMan agement.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)在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)在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)在D:\ SVN\STT\trunk\4-0_CodigoFonte_Enterprise\4-4_SRC\Infraero.TINE3.STTEnterprise.Web\Controllers\LoginController.cs: 80 Infraero.TINE3.D:\ SVN\STT\trunk\4-0_CodigoFonte_Enterprise\4-4_SRC\Infraero.TINE3.STTEnterprise.Web\Controllers\LoginController.cs中的STTEnterprise.Web.Controllers.LoginController.Index(LoginViewModel loginViewModel):54 lambda_method(Closure, ControllerBase,Object [])+ 108
System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller,Object [] parameters)+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(IActionFilter filter,ActionExecutingContext preContext,Func'1 continuation)+263
System.Web.Mvc.<> c__DisplayClass17.b__14()+19 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext,IList'1过滤器,ActionDescriptor actionDescriptor,IDictionary`2 parameters)+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(Action f)+7 System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action)+22 System.Web.Mvc. MvcHandler.EndProcessRequest(IAsyncResult asyncResult)+60
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)+9
System.Web.CallHandlerExecutionStep.System.Web.HttpA pplication.IExecutionStep.Execute()+8963149 System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean&completedSynchronously)+184

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;
}
Run Code Online (Sandbox Code Playgroud)

Nev*_*lle 66

我有完全相同的错误,并通过更改站点的应用程序池在网络服务下运行来修复它.

在IIS中:

  • 选择您网站的应用程序池
  • 选择右侧的"高级设置"
  • 在"高级设置"弹出窗口中,向下滚动到"流程模型"组
  • 将名为Identity的第一个选项更改为NetworkService(我的设置为默认的ApplicationPoolIdentity).

我希望这有帮助.

  • 谢谢,你帮忙:http://stackoverflow.com/questions/19439873/cant-get-principalcontext-to-work-in-sharepoint-2010-with-claims-based-authenti/19554726#19554726 (3认同)
  • ApplicationPoolIdentity一直在为我工作,然后自发地破裂了.我很确定问题是这个错误,它有一个可用的修补程序:"出现此问题是因为在更改计算机密码后错误地在全局凭据中设置了标志.因此,重新启动IIS服务后身份验证失败"( http://support.microsoft.com/kb/2545850) (2认同)
  • 这对我有用,但显然不是每个http://www.iis.net/learn/manage/configuring-security/application-pool-identities的首选解决方案.我最后做了修补程序,如下面的答案中所述. (2认同)

小智 35

我知道这个主题已经过时,但仅适用于未来寻找此问题的人只需使用此方法执行具有Elevate权限的代码

using (HostingEnvironment.Impersonate()) {
    // This code runs as the application pool user
    }
Run Code Online (Sandbox Code Playgroud)


Joe*_*Joe 7

没有一个InnerException在这种情况下,它只是一个包装COM错误.

几乎可以肯定,这是因为您的应用程序池标识没有访问Active Directory的权限.


Ton*_* L. 6

在我的情况下,在应用程序池中从ApplicationPoolItentity切换到NetworkService确实有效,它不是首选"因为作为网络服务运行的服务可以通过以下链接篡改在同一身份下运行的其他服务":(http:// www. iis.net/learn/manage/configuring-security/application-pool-identities).

我在服务器上运行了修补程序(KB2545850)并根据此答案重新启动:( DirectoryServicesCOMException 80072020来自IIS 7.5在ApplicationPoolIdentity下运行的站点)

它现在似乎运作良好.

我的任务背景:将Server 2003上的.net framework 2.0升级到Server 2008 R2上的.net framework 4.0.


归档时间:

查看次数:

63051 次

最近记录:

8 年,1 月 前