Bagikan melalui


Sesi

Sampel Sesi menunjukkan cara menerapkan kontrak yang memerlukan sesi. Sesi menyediakan konteks untuk melakukan beberapa operasi. Sesi 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 untuk melakukan serangkaian operasi aritmatika, sambil tetap menjaga hasil yang sedang berjalan. Fungsionalitas ini ditentukan oleh kontrak ICalculatorSession. Layanan mempertahankan status untuk klien karena beberapa operasi layanan dipanggil untuk melakukan penghitungan. Klien dapat mengambil hasil saat ini dengan memanggil Result() dan menghapus hasilnya ke nol dengan memanggil Clear().

Dalam sampel ini, klien adalah aplikasi konsol (.exe) dan layanan di-hosting oleh Layanan Informasi Internet (IIS).

Catatan

Prosedur penyiapan dan petunjuk pembuatan untuk sampel ini terdapat di akhir topik ini.

Mengatur kontrak SessionMode untuk Required memastikan ketika kontrak diekspos melalui pengikatan tertentu, pengikatan mendukung sesi. Jika pengikatan tidak mendukung sesi, maka pengecualian dimunculkan. Antarmuka ICalculatorSession didefinisikan sewaktu-waktu sehingga satu atau beberapa operasi dapat dipanggil, yang memodifikasi hasil yang sedang berjalan, seperti yang ditunjukkan dalam kode sampel 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. Layanan 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 komputer klien.

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

Untuk menyiapkan, membangun, dan menjalankan sampel

  1. Pastikan Anda telah melakukan Prosedur Penyiapan Satu Kali untuk Sampel Windows Communication Foundation.

  2. Untuk membangun solusi edisi C# atau Visual Basic .NET, ikuti petunjuknya di Membangun Sampel WCF.

  3. Untuk menjalankan sampel dalam konfigurasi satu atau lintas komputer, ikuti instruksi pada Menjalankan Sampel WCF.