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

我是WCF的新手,并试图了解各种实例管理技术,我能够理解Per-Call&单例实例模式,但我在每个会话实例模式中感到困惑,在这种情况下,每个客户端都创建一个单独的会话吗?但它没有发生在我的情况下:

我的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
我错了吗?请帮忙! TIA

最佳答案
我想也许最好的解释方法是通过这些图表(从主题上的CodePlex article借来):

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

这与PerCall和Singleton形成鲜明对比如下:

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

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

转载注明原文:c# – WCF实例管理 – PerSession模式 - 代码日志