【问题标题】:WCF Instance Management - PerSession ModeWCF 实例管理 - PerSession 模式
【发布时间】:2013-10-29 17:09:55
【问题描述】:

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

我的 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

【问题讨论】:

  • 你没有显示客户电话 - 不可能知道那里发生了什么......

标签: c# wcf


【解决方案1】:

我认为解释它的最好方法可能是通过这些图表(借自 CodePlex article 的主题):

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

这与 PerCall 和 Singleton 的对比如下:

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

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

【讨论】:

    【解决方案2】:

    会话意味着您可以使用asp.net中的会话对象,而不是服务对象=它自己被重用。您可以将计数值保存在 Session 对象中,但不会得到预期的结果。结果将是 1,2,3---4,5,6

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多