5

私は 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 のはずだと思います どこか間違っていますか? 助けてください!ティア

4

2 に答える 2

5

おそらくこれを説明する最善の方法は、次の図を使用することだと思います (トピックに関するCodePlex の記事から借用)。

セッションごとの WCF 呼び出しごとの WCF ここに画像の説明を入力

grock の主な概念は、特定のクライアントが PerSession モードでサービスへのプロキシを作成すると、そのプロキシからそのサービスへの呼び出しが繰り返されると、同じサービス インスタンス (そのクライアントに固有) が呼び出されるということです。これにより、各クライアントが独自のサービス オブジェクト インスタンスを取得するため、クライアントのサービス オブジェクトに状態を格納できます。

これは、次のように PerCall および Singleton と対照的です。

PerCall サービスへのプロキシを作成すると、サービス操作を呼び出すたびに、サービス オブジェクトの新しいインスタンスが取得されます。

SingleTon サービスへのプロキシを作成すると、すべてのクライアント要求を処理するサービスのインスタンスは 1 つだけになります。

于 2013-11-15T21:21:17.737 に答える
2

セッションとは、サービス オブジェクト自体が再利用されるのではなく、asp.net のセッション オブジェクトを使用できることを意味します。カウント値を Session オブジェクトに保存すると、期待した結果が得られません。結果は 1,2,3 ---4,5,6 になります

于 2013-10-29T17:13:28.877 に答える