是否有可能创建一个单例WCF,仅为每个用户会话维护内存?

本文关键字:用户 会话 内存 维护 WCF 创建 有可能 单例 一个 是否 | 更新日期: 2023-09-27 18:13:50

我想创建一个使用单例模式的WCF,但服务本身不会与其他用户共享相同的内存?

我的WCF ServiceBehavior当前设置为:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]

不幸的是,有些情况下数据混合到两个不同的用户(这是一件坏事)。

我可以做一个PerCall,但我要修改一大堆代码:(只是希望我的代码还有机会。

是否有可能创建一个单例WCF,仅为每个用户会话维护内存?

Singleton =类中的任何私有字段都在对该类的所有调用中共享。如果你想拥有单例服务,但每个用户都有单独的数据,你必须将数据存储在其他地方(而不是在服务实例中)——例如在数据库中,并为每个用户的调用加载它们。

在极少数情况下应该使用单例服务。大多数情况下,单例服务的使用只意味着错误的架构。

我想你是受到了国家全面服务的困扰。找到它们的一个简单方法是查看你的类定义,如果你在里面找到了成员变量,问问你自己,你真的需要它们成为成员吗?

如果没有,请删除

如果是,试着看看是否可以把它们缓存(静态的,动态的)

如果不能把它们放在缓存中,那么尝试从数据库中获取它们。

以下是我多年的经验之谈

1)服务应该尽可能是无状态的。或者只是认为他们是无状态的。

对于性能,他们可以维护两种类型的缓存

a)静态缓存(只读的缓存,只要一组服务在服务,它就保持不变)大部分在服务启动期间完成。例如你的工作流缓存

b)动态缓存(可以不时刷新),例如授权缓存