Dot-Net

System.DirectoryServices.DirectoryServicesCOMException:發生操作錯誤

  • December 3, 2012

我有相同的網路應用程序在其他三台伺服器上工作。任何人都知道為什麼不在第四台伺服器上工作?查看錯誤和堆棧跟踪:

發生操作錯誤。

說明:執行目前 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 上下文,類型 principalType,Nullable'1 identityType,字元串 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.Segranca.ServicoAutenticacao.EfetuarLogin(AccessUserAccessUser,Password String) 在 D:\SVN\STT\trunk\4-0_CodigoFonte_Enterprise\4-4_SRC\Infraero.TINE3.STTEnterprise.Web\Common\ Security \ServicoAutenticacao.cs:34 Infraero.TINE3.STTEnterprise.Web.Controllers.LoginController.ValidarUsuarioAD(字元串註冊,字元串密碼,AccessUserAccessUser)在 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(字元串註冊,字元串密碼)在 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。D:\SVN\STT\trunk\4-0_CodigoFonte_Enterprise\4-4_SRC\Infraero.TINE3.STTEnterprise.Web\Controllers\LoginController.cs:54 lambda_method(Closure, ControllerBase, Object[]) 中的索引(LoginViewModel loginViewModel) +108

System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase 控制器, Object[] 參數) +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 filter, 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, 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(動作 f)+7 System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(動作動作)+22 System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)+60

系統。 Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult 結果) +9

System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8963149 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean&同步完成)+184*

登錄方式:

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

我遇到了完全相同的錯誤,並通過將站點的應用程序池更改為在網路服務下執行來修復它。

在 IIS 中:

  • 選擇您網站的應用程序池
  • 選擇右側的高級設置
  • 在 Advanced Settings 彈出視窗中,向下滾動到 Process Model 組
  • 將名為 Identity 的第一個選項更改為 NetworkService(我的設置為預設的 ApplicationPoolIdentity)。

我希望這有幫助。

引用自:https://stackoverflow.com/questions/13688031