【问题标题】:DirectoryServicesCOMException on IIS7 with System.DirectoryServices.AccountManagement but not in devIIS7 上的 DirectoryServicesCOMException 与 System.DirectoryServices.AccountManagement 但不在开发中
【发布时间】:2012-09-04 14:34:12
【问题描述】:

以下代码在我的开发 PC 上运行良好,但在部署到服务器时崩溃:

using System.DirectoryServices.AccountManagement;

using (var ctx = new PrincipalContext(ContextType.Domain, domainName))
using (GroupPrincipal grp = GroupPrincipal.FindByIdentity(ctx, IdentityType.Name, groupName))
{
    if (grp == null) return new string[0];

    return grp.GetMembers(true).Select(m => m.SamAccountName).ToArray();
}

崩溃如下:

[DirectoryServicesCOMException (0x80072020): An operations error occurred.]
   System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail) +439513
   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) +141
   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, IdentityType identityType, String identityValue) +86
   System.DirectoryServices.AccountManagement.GroupPrincipal.FindByIdentity(PrincipalContext context, IdentityType identityType, String identityValue) +29
   WebApp.WebForm1.Test() in C:\MyProject\trunk\WebApp\WebForm1.aspx.cs:30

场景:

  • IIS7 在已加入域的 Windows Server 2008 x64 上
  • ASP.NET 4 Intranet 应用程序
  • IIS 中除集成 Windows 身份验证外的所有身份验证模式均已关闭
  • 应用程序池配置为以域用户身份运行

Web.config如下:

<authentication mode="Windows" />
<authorization>
  <deny users="?"/>
</authorization>
<identity impersonate="true" >

System.Security.Principal.WindowsIdentity.GetCurrent().Name 在生产中正确返回我的 AD 用户名,所以我认为这意味着模拟工作正常。

【问题讨论】:

  • 我认为它返回您的 AD 用户名这一事实只是身份验证权限的一部分。 “应用程序池配置为以域用户身份运行”这可能没有必要的权限来使用您请求的属性(超出顶级用户信息)点击 AD,或者至少不是以这种方式。您是否收到任何错误消息?服务器事件日志说什么?任何身份验证失败?尝试使用一些管理员凭据设置您的主体上下文以测试并查看是否有效。

标签: c# iis-7 active-directory windows-server-2008 directoryservices


【解决方案1】:

我遇到了类似的问题。

我在网络服务器上部署后才收到此错误,它在我的机器上运行良好。

我发现,在服务器上,在 IIS 中,Impersonation 仍然使用 Window Authentication 检查。

通过在 IIS 中删除此模拟,错误消失了...

【讨论】:

    【解决方案2】:

    我有一个非常相似的问题。通过将我的应用程序池作为 NetworkService 运行来解决它。我也像你一样使用 Windows 身份验证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-26
      • 1970-01-01
      • 2010-12-08
      • 1970-01-01
      • 2011-03-18
      • 2012-10-05
      • 1970-01-01
      • 2011-08-06
      相关资源
      最近更新 更多