C#Active Directory PrincipalContext/UserPrincipal.IsMemberOf错误
所以我有一个问题,我真的不知道该怎么问。基本上,我有一些代码,当我运行本地机器时,这些代码在本地机器上运行得非常好。一旦我将它发布到我们的开发web服务器,它就会失败。我不确定这是IIS安装问题、web.config问题还是编码问题 下面是代码片段C#Active Directory PrincipalContext/UserPrincipal.IsMemberOf错误,c#,active-directory,directoryservices,C#,Active Directory,Directoryservices,所以我有一个问题,我真的不知道该怎么问。基本上,我有一些代码,当我运行本地机器时,这些代码在本地机器上运行得非常好。一旦我将它发布到我们的开发web服务器,它就会失败。我不确定这是IIS安装问题、web.config问题还是编码问题 下面是代码片段 bool isMember = false; PrincipalContext ADDomain = new PrincipalContext(ContextType.Domain); UserPrincipal user
bool isMember = false;
PrincipalContext ADDomain = new PrincipalContext(ContextType.Domain);
UserPrincipal user = UserPrincipal.FindByIdentity(ADDomain, userID);
if (user.IsMemberOf(ADDomain, IdentityType.Name, groupName.Trim()))
{
isMember = true;
}
return isMember;
我传入一个用户名和一个组,它告诉我该用户是否是该组的成员。没问题。在我的机器上效果很好。我去把代码发布到Web服务器上,当它上线时失败了
UserPrincipal user = UserPrincipal.FindByIdentity(ADDomain, userID);
它抛出以下错误:
[DirectoryServicesCOMException(0x80072020):发生操作错误。]System.DirectoryServices.DirectoryEntry.Bind(布尔throwIfFail)+788
System.DirectoryServices.DirectoryEntry.Bind()+44
System.DirectoryServices.DirectoryEntry.get\u AdsObject()+42
System.DirectoryServices.PropertyValueCollection.PopulateList()+29
System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry 条目,字符串propertyName)+63
System.DirectoryServices.PropertyCollection.get_项(字符串propertyName)+163 System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInitNoContainer() +521217
System.DirectoryServices.AccountManagement.PrincipalContext.dododomaininit() +51
System.DirectoryServices.AccountManagement.PrincipalContext.Initialize() +141
System.DirectoryServices.AccountManagement.PrincipalContext.get\u QueryCtx() +42
System.DirectoryServices.AccountManagement.Principal.FindByIdentity with TypeHelper(PrincipalContext 上下文,类型principalType,可空`1 identityType,字符串 identityValue,DateTime refDate)+29
System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(PrincipalContext 上下文,字符串标识符值)+95
Cosmic.Web.Login.btnSubmit\u单击C:\Cosmic\Cosmic.Web\Login.aspx.cs:79
System.Web.UI.WebControl.Button.RaisePostBackEvent(String eventArgument)+154
System.Web.UI.Page.ProcessRequestMain(布尔includeStagesBeforeAsyncPoint,布尔includeStagesAfterAsyncPoint)+3691
有没有想到这可能会失败?我的第一个猜测是:运行此代码的用户帐户没有查询Active Directory所需的权限 要解决此问题,基本上您需要从以下内容更改构造函数:
PrincipalContext ADDomain = new PrincipalContext(ContextType.Domain);
(使用运行此代码的当前默认凭据建立与AD的连接)
为此:
PrincipalContext ADDomain =
new PrincipalContext(ContextType.Domain, "DOMAIN", useraccount, password);
并为您知道有足够权限查询Active Directory的用户帐户提供用户名和密码。如果您有几秒钟的时间等待来自大型广告的数据,请继续使用PrincipalContext,但如果您希望在毫秒内得到响应,请使用DirectoryEntry,DirectorySearcher和.PropertiesToLoad 这里有一个例子
你知道吗,事情就是这样。Web服务器没有访问Active Directory的正确凭据。在那里放一些凭证,它的效果会更好一些。谢谢