我有一个WCF服务,我从多个客户端调用.我需要在全球范围内存储和管理一个值.在我的服务上,我有以下属性:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Single)]
在我的服务中,我有类似的东西:
private static int counter;
public void PrintCounter()
{
counter++;
StreamWriter sw = new StreamWriter(@"C:\outFile.txt", true);
sw.WriteLine("Counter: " + counter);
sw.Close();
}
由于我对WCF的了解有限,我认为我有一个Singleton服务,而且我的私有变量是静态的,所有对服务的调用都会使用相同的对象.
但是,当我查看我的日志输出时,我看到以下内容:
Counter: 1
Counter: 1
我期望看到的是:
Counter: 1
Counter: 2
我错过了一些能让我按照我需要的方式工作的东西吗?我是否需要将对象存储在某种缓存中?任何帮助是极大的赞赏.
如果需要,我可以发布更多编码.
最佳答案 因为它是单身人士服务,例如只有一个实例将存在,为什么不将它作为常规类成员变量?
由于ConcurrencyMode也设置为单一 – 您甚至不必担心对变量的并发访问.
另一方面 – 使用ConcurrencyMode = Single的单例是一个真正非常慢的服务的配方,它可能很快成为瓶颈 – 所以你可能想要以这样的方式编写你的代码,它也可以在ConcurrencyMode = Multiple下工作访问成员变量.