2

當部署到服務器下面的代碼工作我的開發PC,但崩潰的罰款:DirectoryServicesCOMException在IIS7與System.DirectoryServices.AccountManagement而不是在開發

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 

場景:

  • 加入域的Windows Server上的IIS7 2008年64
  • ASP.NET 4內部網應用除了集成Windows驗證
  • 應用池配置爲域用戶如下運行

的Web.config在IIS

  • 所有認證方式關閉:

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

    System.Security.Principal.WindowsIdentity.GetCurrent().Name正確地返回我的AD用戶名,所以我認爲這意味着模擬工作正常。

  • +0

    我認爲它返回您的AD用戶名的事實只是認證權限的一部分。 「配置爲以域用戶身份運行的應用程序池」,這可能沒有必要的權限來使用您請求的屬性(超出頂級用戶信息)或至少不是以這種方式訪問​​AD。你是否收到任何錯誤訊息?服務器事件日誌說什麼?任何驗證失敗?嘗試使用一些管理員憑據設置您的主體上下文來測試,看看是否有效。 – Sinaesthetic

    回答

    0

    我有類似的問題。

    我得到這個錯誤只有在部署在網絡服務器後,它正在我的機器上完美工作。

    我發現,在服務器上,在IIS中,模擬仍然使用窗口身份驗證進行檢查。

    消除這種模擬在IIS中,,,走了錯誤...

    0

    我有一個非常類似的問題。通過運行我的App Pool作爲NetworkService解決它。我也像你一樣使用Windows身份驗證。

    相關問題