c# – WCF静态变量通过每次调用重置

我有一个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下工作访问成员变量.

点赞