次の方法で共有


セッション

セッション サンプルでは、セッションを必要とするコントラクトを実装する方法を示します。 セッションは、複数の操作を実行するためのコンテキストを提供します。 これにより、サービスは、後続の操作で前の操作の状態を使用できるように、特定のセッションに状態を関連付けることができます。 このサンプルは、電卓サービスを実装する開始ガイドに基づいています。 ICalculator コントラクトが変更され、一連の算術演算が実行され、実行中の結果が保持されます。 この機能は、 ICalculatorSession コントラクトによって定義されます。 計算を実行するために複数のサービス操作が呼び出されるため、サービスはクライアントの状態を維持します。 クライアントは、 Result() を呼び出して現在の結果を取得し、 Clear()を呼び出して結果を 0 にクリアできます。

このサンプルでは、クライアントはコンソール アプリケーション (.exe) であり、サービスはインターネット インフォメーション サービス (IIS) によってホストされています。

このサンプルのセットアップ手順とビルド手順は、このトピックの最後にあります。

コントラクトの SessionModeRequired に設定すると、コントラクトが特定のバインディングに対して公開されるときに、バインドでセッションがサポートされるようになります。 バインディングがセッションをサポートしていない場合は、例外がスローされます。 ICalculatorSession インターフェイスは、次のサンプル コードに示すように、実行中の結果を変更する 1 つ以上の操作を呼び出すように定義されています。

[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples", SessionMode=SessionMode.Required)]
public interface ICalculatorSession
{
    [OperationContract(IsOneWay=true)]
    void Clear();
    [OperationContract(IsOneWay = true)]
    void AddTo(double n);
    [OperationContract(IsOneWay = true)]
    void SubtractFrom(double n);
    [OperationContract(IsOneWay = true)]
    void MultiplyBy(double n);
    [OperationContract(IsOneWay = true)]
    void DivideBy(double n);
    [OperationContract]
    double Result();
}

サービスは、PerSessionInstanceContextModeを使用して、特定のサービス インスタンス コンテキストを各受信セッションにバインドします。 これにより、サービスはローカル メンバー変数内の各セッションの実行結果を維持できます。

[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)]
public class CalculatorService : ICalculatorSession
{
    double result = 0.0D;

    public void Clear()
    {  result = 0.0D; }

    public void AddTo(double n)
    {  result += n;   }

    public void SubtractFrom(double n)
    {  result -= n;   }

    public void MultiplyBy(double n)
    {  result *= n;   }

    public void DivideBy(double n)
    {  result /= n;   }

    public double Result()
    {  return result; }
}

サンプルを実行すると、クライアントはサーバーに対して複数の要求を行い、結果を要求します。その結果がクライアント コンソール ウィンドウに表示されます。 クライアント ウィンドウで Enter キーを押して、クライアントをシャットダウンします。

(((0 + 100) - 50) * 17.65) / 2 = 441.25
Press <ENTER> to terminate client.

サンプルを設定、ビルド、実行するには

  1. Windows Communication Foundation サンプル One-Time セットアップ手順を実行していることを確認します。

  2. ソリューションの C# または Visual Basic .NET エディションをビルドするには、「Windows Communication Foundation サンプルのビルド」の手順に従います。

  3. 単一または複数のコンピューター間の構成でサンプルを実行するには、「Windows Communication Foundation Samplesの実行」の手順に従います。