在Web场中的所有服务器之间共享List <int> </int>

时间:2012-03-31 20:19:38

标签: .net asp.net-mvc-3 web-farm

我已阅读有关存储会话状态out-of-process但仍在内存中的方法是将网络应用配置为使用StateServer等提供商

我有一个List<int>,其中包含accountIDs我希望在webfarm中的所有服务器之间共享。该列表不是与任何特定帐户相关的会话数据,它是我想在内存中的全局列表(但可能是在进程外),以便可以由服务器场中的每个服务器检查每个请求以查看是否它包含accountID

这些数据能否以与共享会话状态相同的方式共享?请问您能详细说明应如何做到这一点?

这是一个很好的解决方案吗?尝试访问同一列表的许多服务器是否会受到性能影响?

编辑:额外进入......

在我的应用中,用户帐户有一个 _accountStatus ,如果设置为已暂停,则该应用会限制用户可以执行的操作。 _accountStatus 保留在定制的身份验证票证中。问题是用户可以保持登录状态,他们可以在今天登录,在一个月内离开并卷土重来但仍然可以登录。同时网站管理员可能已经暂停了他们的帐户,但是因为 _accountStatus 是持久存在于身份验证票证中,它现在不正确,用户仍然可以访问它们不应该访问。

因此,当管理员更改用户的 _accountStatus 时,他们的 _accountID 会添加到the list。然后在每个请求中检查列表。如果该帐户在列表中,则必须从数据库(始终具有正确的值)重新加载 _accountStatus 并更新身份验证票证。

所以是的,也许坚持SQL Server中的列表是最好的解决方案。

另一种解决方案可能是将 _accountStatus 存储在身份验证票证中但不存储在会话中。启动新会话时,可以加载它。但是现在有一个问题,如果管理员决定在用户​​会话期间暂停帐户。应用程序如何访问该用户的会话并从HttpApplication外部更新 _accountStatus ?或者在用户的请求之间,如果你明白我的意思?

1 个答案:

答案 0 :(得分:2)

没有任何内置功能。<​​/ p>

对此类列表的并发写访问权需要锁定数据一致性。写作是常见的吗?我希望不是因为那会破坏表现。

我建议您将该列表保留在SQL Server中。也许文件共享上的文本文件也足够了。