Asp.net PrincipalContext未从active Directory获取最新的用户角色

Asp.net PrincipalContext未从active Directory获取最新的用户角色,asp.net,active-directory,roles,roleprovider,principalcontext,Asp.net,Active Directory,Roles,Roleprovider,Principalcontext,我有一个ASP.NET MVC站点的自定义角色提供程序,它使用PrincipalContext为用户检索角色,如下所示 这很好,只是在Active Directory中更改组和它出现在PrincipalContext中之间有很长的延迟 管理员可以通过站点更新组,并希望这些组立即可见 我怎样才能避免这种延误?某处有缓存吗?几个小时的谷歌搜索并没有给出任何解决方案 我确实认为这可能是一个环境问题,因为我的本地机器会立即这样做,但测试服务器不会 context = new PrincipalC

我有一个ASP.NET MVC站点的自定义角色提供程序,它使用PrincipalContext为用户检索角色,如下所示

这很好,只是在Active Directory中更改组和它出现在PrincipalContext中之间有很长的延迟

管理员可以通过站点更新组,并希望这些组立即可见

我怎样才能避免这种延误?某处有缓存吗?几个小时的谷歌搜索并没有给出任何解决方案

我确实认为这可能是一个环境问题,因为我的本地机器会立即这样做,但测试服务器不会

    context = new PrincipalContext(ContextType.Domain, name, container, userName, _password))

    var p = UserPrincipal.FindByIdentity(context, IdentityType.UserPrincipalName, username);
    var groups = p.GetAuthorizationGroups();
定义“长”

Active Directory林可以分为多个站点(与web站点无关,将它们视为位置)。站点内服务器之间的复制每隔几秒钟执行一次。默认情况下,鉴于。就像所有事情一样,它实际上比那更复杂,但那就行了。因此,如果您的服务器位于不同的站点,并且您正在本地域控制器(DC)上进行更改,那么您的更改可能需要一段时间才能复制到服务器正在使用的DC。(顺便说一句,这3个小时可以减少到15分钟。)如果您的站点和服务器的站点之间有一个站点,并且它们之间没有直接链接,如果您的广告拓扑结构大而复杂,则可能需要等待两个复制间隔。或者更多

你需要和你的广告管理员谈谈以确定这一点

您可以连接到服务器站点上的DC,对组成员身份进行更改,这样您可以更快地看到这些更改。如果您使用的是Active Directory用户和计算机,或者其他一些UI,那么这是非常合理的。如果您正在编写一个应用程序来进行更改,请确保使用可靠的方法选择DC,这样您就不会失去AD多主拓扑的好处