Sesi

Sampel Sesi menunjukkan cara menerapkan suatu kontrak yang memerlukan sesi. Sesi menyediakan konteks untuk melakukan beberapa operasi. Ini memungkinkan layanan untuk mengaitkan status dengan sesi tertentu, sehingga operasi berikutnya dapat menggunakan status operasi sebelumnya. Sampel ini didasarkan pada Memulai, yang mengimplementasikan layanan kalkulator. Kontrak ICalculator telah dimodifikasi untuk memungkinkan serangkaian operasi aritmatika dilakukan, sambil menjaga hasil yang berjalan. Fungsionalitas ini didefinisikan oleh ICalculatorSession kontrak. Layanan mempertahankan status untuk klien ketika beberapa operasi layanan dipanggil untuk melakukan perhitungan. Klien dapat mengambil hasil saat ini dengan memanggil Result() dan menghapus hasilnya menjadi nol dengan memanggil Clear().

Dalam sampel ini, klien adalah aplikasi konsol (.exe) dan layanan dihosting oleh Internet Information Services (IIS).

Nota

Prosedur penyiapan dan instruksi build untuk sampel ini terletak di akhir topik ini.

Mengatur SessionMode dari kontrak menjadi Required memastikan bahwa ketika kontrak diekspos melalui pengikatan tertentu, pengikatan tersebut mendukung sesi. Jika pengikatan tidak mendukung sesi, maka sebuah pengecualian akan dilemparkan. Antarmuka ICalculatorSession didefinisikan sedemikian rupa sehingga satu atau beberapa operasi dapat dipanggil, yang memodifikasi hasil berjalan, seperti yang ditunjukkan dalam contoh kode berikut.

[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();
}

Layanan ini menggunakan InstanceContextMode dari PerSession untuk mengikat konteks instans layanan tertentu ke setiap sesi masuk. Ini memungkinkan layanan untuk mempertahankan hasil yang berjalan untuk setiap sesi dalam variabel anggota lokal.

[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; }
}

Saat Anda menjalankan sampel, klien membuat beberapa permintaan ke server dan meminta hasilnya, yang kemudian ditampilkan di jendela konsol klien. Tekan ENTER di jendela klien untuk mematikan klien.

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

Untuk menyiapkan, mengompilasi, dan menjalankan sampel

  1. Pastikan Anda telah melakukan Prosedur Penyiapan One-Time untuk Sampel Windows Communication Foundation.

  2. Untuk membangun solusi edisi C# atau Visual Basic .NET, ikuti instruksi di Membangun Sampel Windows Communication Foundation.

  3. Untuk menjalankan sampel dalam konfigurasi satu atau lintas komputer, ikuti instruksi di Menjalankan Sampel Windows Communication Foundation.