iis 系统.目录服务.目录服务COMException:发生操作错误

nfg76nw0  于 2022-12-13  发布在  其他
关注(0)|答案(7)|浏览(118)

I have the same web app working in three others servers. Anyone have any idea why is not working in the 4th server? See the error and stacktrace:

  • An operations error occurred.*
  • Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.*
  • Exception Details:

System.DirectoryServices.DirectoryServicesCOMException: An operations error occurred.*

  • Source Error:*
  • An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.*
  • Stack Trace:*
  • [DirectoryServicesCOMException (0x80072020): An operations error occurred. ] 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.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) in 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) in 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) in 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) in D:\SVN\STT\trunk\4-0_CodigoFonte_Enterprise\4-4_SRC\Infraero.TINE3.STTEnterprise.Web\Controllers\LoginController.cs: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 filters, 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.HttpApplication.IExecutionStep.Execute() +8963149 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184*
EfetuarLogin Method:

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

v2g6jxz61#

我遇到了完全相同的错误,并通过将站点的应用程序池更改为在网络服务下运行来修复它。
在IIS中:

  • 选择站点的应用程序池
  • 选择右侧的“Advanced Settings”(高级设置)
  • 在“高级设置”弹出窗口中,向下滚动到Process Model组
  • 将名为Identity的第一个选项更改为NetworkService(我的设置为默认的ApplicationPoolIdentity)。

我希望这能帮上忙。

xxhby3vn

xxhby3vn2#

我知道这个主题已经很老了,但只是为将来查找此问题的人员准备的。只需使用此方法执行具有Elevate权限的代码

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

raogr8fs3#

在本例中没有InnerException,它只是 Package 了一个COM错误。
几乎可以肯定,这是因为您的应用程序池身份没有访问Active Directory的权限。

yws3nbqq

yws3nbqq4#

在我的案例中,在应用程序池中从ApplicationPoolItentity切换到NetworkService确实有效这不是首选,“因为作为网络服务运行的服务可能会篡改在同一标识下运行的其他服务”,请参见以下链接:(http://www.iis.net/learn/manage/configuring-security/application-pool-identities)中的一个。
我在服务器上运行了修补程序(KB2545850),并根据以下答案重新启动:(DirectoryServicesCOMException 80072020 From IIS 7.5 Site Running Under ApplicationPoolIdentity
现在看起来运行良好。
我的任务背景:将应用程序从Server 2003上的.net framework 2.0升级到Server 2008 R2上的.net framework 4.0。

7fhtutme

7fhtutme5#

我的体验与此错误略有不同。我不得不将内部部署应用程序移动到Azure,其中LDAP调用是从内部部署发生的,但即使在打开所需的防火墙后也不是从Azure发生的。
我尝试了上面提到的所有解决方案,但都没有帮助。Azure VM上已经选择了网络服务。
经过多次试验和研究。我修好了。
解决方案:内部部署服务器具有访问LDAP的权限,并且不需要任何用户名和密码。但在Azure上,您需要使用用户名和密码专门进行LDAP调用。以下代码对此有所帮助。

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

v1uwarro6#

1 -将应用程序池更改为在网络服务下运行。
2 -单击“身份验证”并禁用ASP.NET模拟。

d8tt03nd

d8tt03nd7#

因此,如果您在这一行上放置中断点:

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

并单步执行它,它会生成上面的异常,该异常没有任何InnerExceptions?
根据堆栈跟踪,该行是问题的开始。返回的异常应该至少包含一些其他信息,说明引发该异常的原因。

内部异常连接器

下面的方法接受顶级异常,并将内部异常的制表符和换行符格式的明细作为字符串返回。

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

相关问题