是否有可能创建一个单例WCF,仅为每个用户会话维护内存?
本文关键字:用户 会话 内存 维护 WCF 创建 有可能 单例 一个 是否 | 更新日期: 2023-09-27 18:13:50
我想创建一个使用单例模式的WCF,但服务本身不会与其他用户共享相同的内存?
我的WCF ServiceBehavior当前设置为:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
不幸的是,有些情况下数据混合到两个不同的用户(这是一件坏事)。
我可以做一个PerCall,但我要修改一大堆代码:(只是希望我的代码还有机会。
Singleton =类中的任何私有字段都在对该类的所有调用中共享。如果你想拥有单例服务,但每个用户都有单独的数据,你必须将数据存储在其他地方(而不是在服务实例中)——例如在数据库中,并为每个用户的调用加载它们。
在极少数情况下应该使用单例服务。大多数情况下,单例服务的使用只意味着错误的架构。我想你是受到了国家全面服务的困扰。找到它们的一个简单方法是查看你的类定义,如果你在里面找到了成员变量,问问你自己,你真的需要它们成为成员吗?
如果没有,请删除
如果是,试着看看是否可以把它们缓存(静态的,动态的)
如果不能把它们放在缓存中,那么尝试从数据库中获取它们。
以下是我多年的经验之谈
1)服务应该尽可能是无状态的。或者只是认为他们是无状态的。
对于性能,他们可以维护两种类型的缓存a)静态缓存(只读的缓存,只要一组服务在服务,它就保持不变)大部分在服务启动期间完成。例如你的工作流缓存
b)动态缓存(可以不时刷新),例如授权缓存