0

我有一个 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();
4

1 回答 1

1

定义“长”!

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

您需要与您的 AD 管理员交谈以确定这一点。

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

于 2013-11-12T05:36:43.787 回答