2012-01-11 68 views
0

让我有一些WCF服务。我需要的是存储与认证用户相关的附加数据,以便立即获取此信息(不从数据存储中查询)。 我想知道实现它的最佳实践。我假设可以使用以下替代方法:WCF和存储认证信息

1)使服务AspnetCompatible,并使用窗体认证,HttpContext和缓存。至于这个选择,我想知道使用它的缺点。

2)制作每会话服务(InstanceContextMode.PerSession)。至于我,这个选项的主要缺点是它可能会导致可伸缩性问题。据我所知basicHttpBinding不支持每会话模式(也就是说,它不适用于Silverlight应用程序)。

那么,你怎么看待它,你会推荐使用什么?

回答

1

您可以随时获取用户名是这样的:

OperationContext.Current.ServiceSecurityContext.PrimaryIdentity.Name

你甚至可以得到密码,但它更复杂一些。 Rory Primrose explains it in his article

你还需要什么其他信息以及什么让你不能在通话之间将它存储在内存中?

编辑:

Scalibity是一个有效的关注,最好我会坚持PerCall实例化。在呼叫之间共享信息的简单方法与在非WCF上下文中实例之间共享信息没有任何不同 - 即静态。

+0

例如,用户登录的组织详细信息以及与经过认证的用户相关的其他特定数据将被频繁使用。至于'把它存储在内存之间的通话' - 这是一般的答案,我需要更具体的;)(因为我提到了我所知道的方式来做到这一点,但我想知道是否有其他更好的解决方案 – andrew 2012-01-11 09:53:23

+0

你的意思是使用静态字典(因为我需要共享数据而不是所有的调用之间,但在与认证用户相关的数据之间)?如果是这样,我需要处理清理这些数据,但它可能会变得有点复杂(当用户明确注销时的情况除外)... – andrew 2012-01-11 10:44:55