我想创建一个采用单例模式的WCF,但服务本身不会与其他用户共享相同的内存?
我的WCF ServiceBehavior目前设置为:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
不幸的是,有些情况下数据混合了两个不同的用户(这是一件坏事)。
我可以做一个PerCall,但我会修改很多代码:( 希望我的代码还有机会。
答案 0 :(得分:4)
Singleton =类中的任何私有字段在对类的所有调用之间共享。如果您想要单独服务但每个用户都有单独的数据,则必须将数据存储在其他位置(而不是在服务实例中) - 例如在数据库中并为每个用户的呼叫加载它们。
在极少数情况下应使用单身人士服务。大多数时候使用单件服务只意味着错误的架构。
答案 1 :(得分:1)
我认为你正在遭受国家全面服务。 找到它们的一个简单方法就是只看你的类定义,如果你在那里找到成员变量,那么问问你自己,你真的需要他们成为会员。
如果不能只删除它们
如果是,请尝试解决,如果你可以把它们放入缓存(静态,动态)
如果无法将它们放入缓存中,请尝试从数据库中获取它们。
这是我多年经验所追随的目标
1)服务应尽可能无国籍。或者只是认为他们是无国籍人。
2)对于性能,他们可以维护两种类型的缓存
a)静态缓存(只读服务的缓存,只要服务集合服务,就保持相同) 主要是在服务开始时完成的。例如你的工作流缓存
b)动态缓存(可以不时刷新),例如授权缓存