gpt4 book ai didi

c# - WCF 实例管理 - PerSession 模式

转载 作者:太空狗 更新时间:2023-10-29 22:59:43 24 4
gpt4 key购买 nike

我是 WCF 的新手,正在尝试了解各种实例管理技术,我能够理解 Per-Call 和 Singleton 实例模式,但我对每个 session 实例模式感到困惑,在这种情况下,对于每个客户端,一个单独的 session 是创建对了吗?但这在我的案例中没有发生:

我的 WCF 服务:-

[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession )]
public class CounterService : ICounterService
{
int _counter = 0;
public int GetCount()
{
_counter++;
return _counter;
}
}

客户代码:-

static void Main(string[] args)
{
CounterServiceReference.CounterServiceClient proxy = new CounterServiceReference.CounterServiceClient();
CounterServiceReference.CounterServiceClient proxy1 = new CounterServiceReference.CounterServiceClient();
Console.WriteLine("WCF Instance mode: Per Session");
Console.WriteLine("Invoking WCF service...");
Console.WriteLine("Counter: {0}", proxy.GetCount());
Console.WriteLine("Counter: {0}", proxy.GetCount());
Console.WriteLine("Counter: {0}", proxy.GetCount());

Console.WriteLine("---------------------------------------");
Console.WriteLine("Counter: {0}", proxy1.GetCount());
Console.WriteLine("Counter: {0}", proxy1.GetCount());
Console.WriteLine("Counter: {0}", proxy1.GetCount());
Console.ReadKey();
}

但是,控制台显示结果为 1,1,1---1,1,1 但我认为它应该是 1,2,3---1,2,3我哪里错了吗?请帮忙!时间差

最佳答案

我认为也许最好的解释方法是通过这些图表(借用关于该主题的 CodePlex article):

WCF Per Session WCF Per Call enter image description here

grock 的主要概念是,当给定客户端在 PerSession 模式下创建服务代理时,从该代理重复调用该服务将调用相同的服务实例(特定于该客户端)。这允许您在客户端的服务对象中存储一些状态,因为每个客户端都有自己的服务对象实例。

这与 PerCall 和 Singleton 的对比如下:

当您创建 PerCall 服务的代理时,您每次调用服务操作时都会获得一个全新的服务对象实例。

当您为 SingleTon 服务创建代理时,该服务只有一个实例处理所有客户端请求。

关于c# - WCF 实例管理 - PerSession 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19664815/

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