gpt4 book ai didi

c# - WCF 静态变量在每次调用时重置

转载 作者:行者123 更新时间:2023-11-30 12:36:51 25 4
gpt4 key购买 nike

我有一个从多个客户端调用的 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 的了解有限,我假设我有一个单例服务,而且我的私有(private)变量是静态的,所有对该服务的调用都将使用同一个对象。

但是,当我查看我的日志输出时,我看到以下内容:

Counter: 1
Counter: 1

我希望看到的是:

Counter: 1
Counter: 2

我是否遗漏了一些东西来使它按照我需要的方式工作?我需要将对象存储在某种缓存中吗?非常感谢任何帮助。

如果需要,我可以发布更多代码。

最佳答案

因为它是一个单例服务,例如它只会存在一个实例,你为什么不把它变成一个普通的类成员变量呢?

由于 ConcurrencyMode 也设置为单一 - 您甚至不必担心对变量的并发访问。

另一方面 - ConcurrencyMode=Single 的单例是一个非常非常慢的服务的秘诀,它可能很快成为瓶颈 - 所以你可能希望以这样一种方式编写你的代码,它也可以在 ConcurrencyMode=Multiple 下工作可能并发访问成员变量。

关于c# - WCF 静态变量在每次调用时重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2426820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com