是否可以创建仅为每用户会话维护内存的单例WCF?

时间:2011-11-09 08:19:49

标签: c# wcf singleton

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

我的WCF ServiceBehavior目前设置为:

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

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

我可以做一个PerCall,但我会修改很多代码:( 希望我的代码还有机会。

2 个答案:

答案 0 :(得分:4)

Singleton =类中的任何私有字段在对类的所有调用之间共享。如果您想要单独服务但每个用户都有单独的数据,则必须将数据存储在其他位置(而不是在服务实例中) - 例如在数据库中并为每个用户的呼叫加载它们。

在极少数情况下应使用单身人士服务。大多数时候使用单件服务只意味着错误的架构。

答案 1 :(得分:1)

我认为你正在遭受国家全面服务。 找到它们的一个简单方法就是只看你的类定义,如果你在那里找到成员变量,那么问问你自己,你真的需要他们成为会员。

如果不能只删除它们

如果是,请尝试解决,如果你可以把它们放入缓存(静态,动态)

如果无法将它们放入缓存中,请尝试从数据库中获取它们。

这是我多年经验所追随的目标

1)服务应尽可能无国籍。或者只是认为他们是无国籍人。

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

a)静态缓存(只读服务的缓存,只要服务集合服务,就保持相同)                 主要是在服务开始时完成的。例如你的工作流缓存

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