将列表保存在wcf服务内存中的最佳方法

时间:2014-11-27 15:25:43

标签: c# wcf iis

我有一个使用wcf服务的登录系统的Web应用程序。用户输入他的用户名/密码进行登录,然后我们为用户创建一个唯一的令牌,然后将令牌保存在浏览器cookie中以保持用户在线。每次用户发送请求时,他的令牌都会与请求一起发送。我们将所有令牌保存在服务内存中的基本List中。现在,我问自己这是否是最好的方法。我会回收我的应用程序内存吗?我已经阅读了this关于在wcf服务中保留列表的问题,看起来我应该避免在内存中使用列表。什么是最好的替代方案?

由于

1 个答案:

答案 0 :(得分:1)

是的,如果您的WCF服务的应用程序池被回收,您将丢失内存中缓存的所有内容,因此您还需要一个持久性回退(例如RDBMS或NoSql数据库),这将被重新加载恢复。

您不会说出您想要存储的内容以及令牌。如果它只是字符串标记,那么HashSet<string>可能是最好的,如果有其他数据,那么ConcurrentDictionary<string, Whatever>最适合。

假设当用户登录/注销您的服务时,需要对令牌集合进行变异,这意味着需要考虑concurrency issues,(您已经通过{{1}获得了ConcurrentDictionary })

您还需要考虑过时令牌的影响 - 您将要删除/删除未使用的令牌(内存和数据库)。