具有System.DirectoryServices.AccountManagement但不在dev中的IIS7上的Di



以下代码在我的开发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:MyProjecttrunkWebAppWebForm1.aspx.cs:30

场景:

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

Web.config如下:

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

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

我也遇到了类似的问题。

我只是在部署到Web服务器后才收到这个错误,它在我的机器上运行得很好。

我发现,在服务器上,在IIS中,模拟仍然使用窗口身份验证进行检查。

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

我也遇到过类似的问题。通过将我的应用程序池作为NetworkService运行来解决此问题。我也和你一样使用Windows身份验证。

最新更新