【问题标题】:UserPrincipal Object, Active Directory Query: DirectoryServicesCOMExceptionUserPrincipal 对象,Active Directory 查询:DirectoryServicesCOMException
【发布时间】:2013-01-15 23:20:17
【问题描述】:

对于 System.DirectoryServices.DirectoryServicesCOMException: An operations error occurred 的重复,我深表歉意,但我还不能发表评论,也没有答案。

这个问题的解决方案不起作用。 Error on publishing: System.DirectoryServices.DirectoryServicesCOMException

我在 Visual Studio 2010 中有一个带有 Razor 视图引擎的新 ASP.NET MVC 3 Web 应用程序项目。它是通过向主控制器添加两行代码和添加 System.DirectoryServices.AccountManagement 引用生成的到项目。

这在我的本地 PC 上运行良好,但在我创建的 Windows 2008 R2 IIS 7.5 站点上出现错误。

该站点使用defaultAppPool,它正在使用ApplicationPoolIdentity。根站点文件夹已被授予IUSRIIS AppPool\DefaultAppPool 读取权限。

控制器中的两行代码分别是:

PrincipalContext context = new PrincipalContext(ContextType.Domain);
ViewBag.name = UserPrincipal.FindByIdentity(context, User.Identity.Name).DisplayName;

我得到的错误是:

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

堆栈跟踪:

[DirectoryServicesCOMException (0x80072020):发生操作错误。]
System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail) +781
System.DirectoryServices.DirectoryEntry.Bind() +44
System.DirectoryServices.DirectoryEntry.get_AdsObject() +42
System.DirectoryServices.PropertyValueCollection.PopulateList() +29
System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry entry, String propertyName) +119
System.DirectoryServices.PropertyCollection.get_Item(String propertyName) +163
System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInitNoContainer() +535649
System.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit() +51
System.DirectoryServices.AccountManagement.PrincipalContext.Initialize() +141
System.DirectoryServices.AccountManagement.PrincipalContext.get_QueryCtx() +42
System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithTypeHelper(PrincipalContext 上下文,类型 principalType,Nullable1 identityType, String identityValue, DateTime refDate) +27
System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(PrincipalContext context, String identityValue) +95
ActiveDirectory.Controllers.HomeController.Index() in C:\projects\ActiveDirectory\ActiveDirectory\Controllers\HomeController.cs:18
lambda_method(Closure , ControllerBase , Object[] ) +79
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary
2 参数)+248
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext、ActionDescriptor actionDescriptor、IDictionary2 parameters) +39
System.Web.Mvc.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() +125
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func
1 续)+640
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext 控制器上下文,IList1 filters, ActionDescriptor actionDescriptor, IDictionary2 个参数)+312
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +691
System.Web.Mvc.Controller.ExecuteCore() +162
System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +305
System.Web.Mvc.c__DisplayClassb.b__5() +62
System.Web.Mvc.Async.c__DisplayClass1.b__0() +20
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +469
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +375

客气点,这是我的第一个问题!

【问题讨论】:

  • 您收到.InnerException 了吗(可能有多个级别) - 这些消息可能真的很有帮助...
  • 没有。不幸的是,这是完整的堆栈跟踪。

标签: c# asp.net


【解决方案1】:

这很可能是权限问题。检查运行应用程序池的帐户是否有权执行这些 Active Directory 调用。如果是本地机器帐户,则可能不会。

您可以在这里找到更多信息:http://msdn.microsoft.com/en-US/library/ms180891(v=vs.80).aspx

【讨论】:

  • 谢谢皮特。您提供的链接使我在这里确定了双跳问题。我可以使用指定域帐户进行模拟,也可以将 ApplicationPool 身份从 ApplicationPoolIdentity 更改为 NetworkService 让我启动并运行查询活动目录的代码。
  • 要找出运行在谁下的 IIS,您可以使用:string currentUser = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-31
  • 2010-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-09
  • 1970-01-01
相关资源
最近更新 更多