【发布时间】:2011-12-26 13:04:10
【问题描述】:
我目前的目标是使用System.DirectoryServices.AccountManagement 程序集中的实用程序为基于域安全组的 ASP.NET 应用程序实现只读角色提供程序。我有以下代码在我的开发域上运行良好,但在部署环境中失败:
Using myContext As New PrincipalContext(ContextType.Domain, Nothing, "DC=My,DC=Controller", accountName, accountPassword)
Try
Dim p As UserPrincipal = UserPrincipal.FindByIdentity(myContext, IdentityType.SamAccountName, userName)
Dim groups = p.GetAuthorizationGroups()
For Each g In groups
Debug.WriteLine("Found security group: " & g.DisplayName & vbNewLine)
Next
Catch ex As Exception
Debug.WriteLine("Encountered an exception: " & vbNewLine & ex.ToString())
End Try
End Using
异常堆栈跟踪返回如下:
System.DirectoryServices.AccountManagement.PrincipalOperationException:服务器上没有这样的对象。 ---> System.DirectoryServices.DirectoryServicesCOMException (0x80072030):服务器上没有这样的对象。 在 System.DirectoryServices.DirectoryEntry.Bind(布尔 throwIfFail) 在 System.DirectoryServices.DirectoryEntry.Bind() 在 System.DirectoryServices.DirectoryEntry.get_SchemaEntry() 在 System.DirectoryServices.AccountManagement.ADStoreCtx.IsContainer(DirectoryEntry de) 在 System.DirectoryServices.AccountManagement.ADStoreCtx..ctor(DirectoryEntry ctxBase,布尔 ownCtxBase,字符串用户名,字符串密码,ContextOptions 选项) 在 System.DirectoryServices.AccountManagement.PrincipalContext.CreateContextFromDirectoryEntry(DirectoryEntry 条目) 在 System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInit() --- 内部异常堆栈跟踪结束 --- 在 System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInit() 在 System.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit() 在 System.DirectoryServices.AccountManagement.PrincipalContext.Initialize() 在 System.DirectoryServices.AccountManagement.PrincipalContext.get_QueryCtx() 在 System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithTypeHelper(PrincipalContext 上下文,类型 principalType,Nullable`1 identityType,字符串 identityValue,DateTime refDate) 在 System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithType(PrincipalContext 上下文,类型 principalType,IdentityType identityType,字符串 identityValue) 在 System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(PrincipalContext 上下文,IdentityType identityType,字符串 identityValue)我知道这里明显的“陷阱”是确定对象实际上,嗯......存在于服务器上。但是,我可以毫无疑问地确认,无论我使用哪个账户的 SAM 账户名,我都会从通话中收到相同的结果。此外,Microsoft 的ActiveDirectoryMembershipProvider 对相同的SAM 帐户名称进行身份验证没有问题,我可以使用DirectorySearcher 类的该信息找到对象。我可以确定开发网络和部署之间的唯一区别是部署环境的 DC 是 Windows Server 2003 机器,而在本地我正在使用 Windows Server 2008 DC 进行开发。我可能会忽略什么?
【问题讨论】:
标签: .net vb.net .net-3.5 active-directory account-management