System.DirectoryServices.DirectoryServicesCOMExcep

2019-06-21 12:00发布

我有同样的web应用程序在其他三个服务器的工作。 任何人有,为什么没有在第四服务器工作的任何想法? 请参阅错误和堆栈跟踪:

发生操作错误。

说明:在当前Web请求的执行过程中发生未处理的异常。 请检查堆栈跟踪有关该错误它起源于代码的详细信息和。

异常详细信息:
System.DirectoryServices.DirectoryServicesCOMException:出现操作错误。

源错误:

在当前web请求的执行过程中生成未处理的异常。 有关异常原因和发生位置的信息可以使用异常堆栈跟踪下面来识别。

堆栈跟踪:

[DirectoryServicesCOMException(0x80072020):出现操作错误。 ] System.DirectoryServices.DirectoryEntry.Bind(布尔throwIfFail)454 System.DirectoryServices.DirectoryEntry.Bind()36 System.DirectoryServices.DirectoryEntry.get_AdsObject()31 System.DirectoryServices.PropertyValueCollection.PopulateList()22
System.DirectoryServices.PropertyValueCollection..ctor(的DirectoryEntry条目,弦乐propertyName的)+96
System.DirectoryServices.PropertyCollection.get_Item(字符串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上下文中,类型principalType,Nullable'1 identityType,字符串identityValue,日期时间refDate)14
System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithType(PrincipalContext背景下,类型principalType,字符串identityValue)+73
System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(PrincipalContext上下文,字符串identityValue)25
Infraero.TINE3.STTEnterprise.Web.Common.Seguranca.ServicoAutenticacao.EfetuarLogin(AcessoUsuario acessoUsuario,字符串senha)在d:\ SVN \ STT \树干\ 4-0_CodigoFonte_Enterprise \ 4-4_SRC \ Infraero.TINE3.STTEnterprise.Web \共同\ Seguranca \ ServicoAutenticacao.cs:34 Infraero.TINE3.STTEnterprise.Web.Controllers.LoginController.ValidarUsuarioAD(字符串matricula,字符串senha,AcessoUsuario acessoUsuario)在d:\ SVN \ STT \树干\ 4-0_CodigoFonte_Enterprise \ 4-4_SRC \ INFRAERO。 TINE3.STTEnterprise.Web \控制器\ LoginController.cs:92 Infraero.TINE3.STTEnterprise.Web.Controllers.LoginController.ValidarUsuario(字符串matricula,字符串senha)在d:\ SVN \ STT \树干\ 4-0_CodigoFonte_Enterprise \ 4-4_SRC \ Infraero.TINE3.STTEnterprise.Web \控制器\ LoginController.cs:80 Infraero.TINE3.STTEnterprise.Web.Controllers.LoginController.Index(loginViewModel loginViewModel)在d:\ SVN \ STT \树干\ 4-0_CodigoFonte_Enterprise \ 4-4_SRC \ Infraero.TINE3.STTEnterprise.Web \ \控制器LoginController.cs:54 lambda_method(封闭,控制研究 erBase,对象[])108
System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase控制器,对象[]参数)17
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext,IDictionary'2参数)208
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext,ActionDescriptor actionDescriptor,IDictionary'2参数)27
System.Web.Mvc。<> c__DisplayClass15.b__12()55 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter滤波器,ActionExecutingContext preContext,Func'1续)263
System.Web.Mvc。<> c__DisplayClass17.b__14()19个System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext,IList'1滤波器,ActionDescriptor actionDescriptor,IDictionary`2参数)191
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext,字符串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(动作F)+7 System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(动作动作)+22 System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult的asyncResult)+60
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult的结果)+9
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()8963149 System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,布尔逻辑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;
}

Answer 1:

我有完全相同的错误,并通过改变该网站的应用程序池在网络服务运行固定它。

在IIS:

  • 选择您的网站的应用程序池
  • 在右侧选择高级设置
  • 在高级设置弹出窗口,向下滚动到过程模型组
  • 改叫身份到网络服务的第一个选项(矿被设置为默认ApplicationPoolIdentity)。

我希望这有帮助。



Answer 2:

我知道这个话题是旧的,但只是谁将会寻找这个问题只要用这个方法来执行与提升权限的代码将来人

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


Answer 3:

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

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



Answer 4:

在我的情况下,从ApplicationPoolItentity在应用程序池切换到网络服务做了工作, 它不是最好按照以下链接“因为作为网络服务运行服务,可以与在相同的身份运行其他服务篡改”:( HTTP:// WWW。 iis.net/learn/manage/configuring-security/application-pool-identities )。

我跑了修补程序( KB2545850在服务器上),并按照本答案:(重启DirectoryServicesCOMException 80072020从IIS 7.5网站运行在ApplicationPoolIdentity )

这似乎是现在的工作很好。

背景在我的任务:从.NET框架2.0 Server 2003上的应用程序升级到.NET框架4.0 Server 2008 R2上。



Answer 5:

我的经验是这个错误有点不同。 我不得不搬到内部部署应用程序天青,那里的LDAP呼叫是从内部部署的发生,但不能从Azure中甚至打开所需的防火墙之后。

我试过上述所有解决方案,但他们都不是有帮助的。 网络服务已经选择了在Azure上的VM。

大量的命中和试验和研究之后。 我修好了它。

解决方案:内部部署服务器被有权限访问LDAP,并没有任何需要用户名和密码。 但是在Azure上,您需要专门做用户名和密码LDAP调用。 下面是这有助于代码。

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


Answer 6:

1 - 更改应用程序池在网络服务运行。
2 - 点击身份验证和禁用ASP.Net模拟。



Answer 7:

所以,如果你把上线断点:

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

和步骤通过它,它会产生不具有任何InnerExceptions上述异常?

据堆栈跟踪,该行是问题的开始。 返回的例外,至少应该有它的一些其他信息,为什么它被抛出。

串接的InnerException

以下方法将顶层异常,并返回内部异常作为字符串的标签和断行格式化击穿。

    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;
    }

您可正是如此称呼它:

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);
        }
    }
}


文章来源: System.DirectoryServices.DirectoryServicesCOMException: An operations error occurred