Bagikan melalui


SessionMode Enum

Definisi

Menentukan nilai yang tersedia untuk menunjukkan dukungan untuk sesi andal yang diperlukan atau didukung kontrak.

public enum class SessionMode
public enum SessionMode
type SessionMode = 
Public Enum SessionMode
Warisan
SessionMode

Bidang

Nama Nilai Deskripsi
Allowed 0

Menentukan bahwa kontrak mendukung sesi jika pengikatan masuk mendukungnya.

Required 1

Menentukan bahwa kontrak memerlukan pengikatan sesi. Pengecualian dilemparkan jika pengikatan tidak dikonfigurasi untuk mendukung sesi.

NotAllowed 2

Menentukan bahwa kontrak tidak pernah mendukung pengikatan yang memulai sesi.

Contoh

Contoh kode berikut menunjukkan cara menggunakan SessionMode properti ServiceContractAttribute untuk menentukan bahwa IMyService kontrak layanan memerlukan pengikatan yang mendukung status sesi.

using System;
using System.Collections.Generic;
using System.ServiceModel;
using System.Threading;

namespace Microsoft.WCF.Documentation
{
  [ServiceContract(
    Name = "SampleDuplexHello",
    Namespace = "http://microsoft.wcf.documentation",
    CallbackContract = typeof(IHelloCallbackContract),
    SessionMode = SessionMode.Required
  )]
  public interface IDuplexHello
  {
    [OperationContract(IsOneWay = true)]
    void Hello(string greeting);
  }

  public interface IHelloCallbackContract
  {
    [OperationContract(IsOneWay = true)]
    void Reply(string responseToGreeting);
  }

  [ServiceBehaviorAttribute(InstanceContextMode=InstanceContextMode.PerSession)]
  public class DuplexHello : IDuplexHello
  {

    public DuplexHello()
    {
      Console.WriteLine("Service object created: " + this.GetHashCode().ToString());
    }

    ~DuplexHello()
    {
      Console.WriteLine("Service object destroyed: " + this.GetHashCode().ToString());
    }

    public void Hello(string greeting)
    {
      Console.WriteLine("Caller sent: " + greeting);
      Console.WriteLine("Session ID: " + OperationContext.Current.SessionId);
      Console.WriteLine("Waiting two seconds before returning call.");
      // Put a slight delay to demonstrate asynchronous behavior on client.
      Thread.Sleep(2000);
      IHelloCallbackContract callerProxy
        = OperationContext.Current.GetCallbackChannel<IHelloCallbackContract>();
      string response = "Service object " + this.GetHashCode().ToString() + " received: " + greeting;
      Console.WriteLine("Sending back: " + response);
      callerProxy.Reply(response);
    }
  }
}


Imports System.Collections.Generic
Imports System.ServiceModel
Imports System.Threading

Namespace Microsoft.WCF.Documentation
    <ServiceContract(Name:="SampleDuplexHello", Namespace:="http://microsoft.wcf.documentation", _
                     CallbackContract:=GetType(IHelloCallbackContract), SessionMode:=SessionMode.Required)> _
    Public Interface IDuplexHello
        <OperationContract(IsOneWay:=True)> _
        Sub Hello(ByVal greeting As String)
    End Interface

  Public Interface IHelloCallbackContract
    <OperationContract(IsOneWay := True)> _
    Sub Reply(ByVal responseToGreeting As String)
  End Interface

  <ServiceBehaviorAttribute(InstanceContextMode:=InstanceContextMode.PerSession)> _
  Public Class DuplexHello
      Implements IDuplexHello

    Public Sub New()
      Console.WriteLine("Service object created: " & Me.GetHashCode().ToString())
    End Sub

    Protected Overrides Sub Finalize()
      Console.WriteLine("Service object destroyed: " & Me.GetHashCode().ToString())
    End Sub

    Public Sub Hello(ByVal greeting As String) Implements IDuplexHello.Hello
      Console.WriteLine("Caller sent: " & greeting)
      Console.WriteLine("Session ID: " & OperationContext.Current.SessionId)
      Console.WriteLine("Waiting two seconds before returning call.")
      ' Put a slight delay to demonstrate asynchronous behavior on client.
      Thread.Sleep(2000)
      Dim callerProxy As IHelloCallbackContract = OperationContext.Current.GetCallbackChannel(Of IHelloCallbackContract)()
            Dim response = "Service object " & Me.GetHashCode().ToString() & " received: " & greeting
      Console.WriteLine("Sending back: " & response)
      callerProxy.Reply(response)
    End Sub
  End Class
End Namespace

Keterangan

SessionMode Gunakan enumerasi dengan ServiceContractAttribute.SessionMode properti untuk mewajibkan, mengizinkan, atau melarang pengikatan untuk menggunakan sesi antara titik akhir yang terhubung ke atau mendukung kontrak layanan. Sesi adalah cara untuk menghubungkan sekumpulan pesan yang dipertukarkan antara dua titik akhir atau lebih. Untuk informasi selengkapnya tentang sesi, lihat Menggunakan Sesi.

Jika layanan Anda mendukung sesi, Anda kemudian dapat menggunakan ServiceBehaviorAttribute.InstanceContextMode properti untuk menentukan hubungan antara instans implementasi kontrak layanan Anda dan sesi saluran.

Misalnya, jika ServiceContractAttribute.SessionMode properti diatur ke Allowed dan ServiceBehaviorAttribute.InstanceContextMode properti diatur ke InstanceContextMode.PerSession, klien dapat menggunakan pengikatan yang mendukung sesi yang andal untuk melakukan panggilan berulang ke objek layanan yang sama.

Karena sesi adalah konsep tingkat saluran yang digunakan model aplikasi, ada interaksi antara SessionMode enumerasi dalam kontrak dan ServiceBehaviorAttribute.InstanceContextMode properti, yang mengontrol hubungan antara saluran dan objek layanan tertentu.

Tabel berikut menunjukkan hasil saluran masuk baik mendukung sesi andal atau tidak mendukung sesi andal mengingat kombinasi layanan dari ServiceContractAttribute.SessionMode nilai properti dan ServiceBehaviorAttribute.InstanceContextMode properti .

Nilai InstanceContextMode Required Diperbolehkan Tidak Diizinkan
PerCall - Perilaku dengan saluran sesi: Sesi dan System.ServiceModel.InstanceContext untuk setiap panggilan.
- Perilaku dengan saluran tanpa sesi: Pengecualian akan muncul.
- Perilaku dengan saluran sesi: Sesi dan System.ServiceModel.InstanceContext untuk setiap panggilan.
- Perilaku dengan saluran tanpa sesi: Ada System.ServiceModel.InstanceContext untuk setiap panggilan.
- Perilaku dengan saluran sesi: Terjadi pengecualian.
- Perilaku dengan saluran tanpa sesi: Ada System.ServiceModel.InstanceContext untuk setiap panggilan.
PerSession - Perilaku dengan saluran berisi sesi: Sesi dan System.ServiceModel.InstanceContext untuk setiap saluran.
- Perilaku dengan saluran tanpa sesi: Pengecualian akan muncul.
- Perilaku dengan saluran berisi sesi: Sesi dan System.ServiceModel.InstanceContext untuk setiap saluran.
- Perilaku dengan saluran tanpa sesi: Ada System.ServiceModel.InstanceContext untuk setiap panggilan.
- Perilaku dengan saluran sesi: Terjadi pengecualian.
- Perilaku dengan saluran tanpa sesi: Ada System.ServiceModel.InstanceContext untuk setiap panggilan.
Single - Perilaku dengan saluran sesi: Satu sesi dan satu System.ServiceModel.InstanceContext untuk semua panggilan.
- Perilaku dengan saluran tanpa sesi: Pengecualian akan muncul.
- Perilaku dengan saluran sesi: Sesi dan System.ServiceModel.InstanceContext untuk setiap singleton yang dibuat atau untuk singleton yang ditentukan pengguna.
- Perilaku dengan saluran tanpa sesi: System.ServiceModel.InstanceContext Untuk setiap singleton yang dibuat atau untuk singleton yang ditentukan pengguna.
- Perilaku dengan saluran sesi: Terjadi pengecualian.
- Perilaku dengan saluran tanpa sesi: System.ServiceModel.InstanceContext Untuk setiap singleton yang dibuat atau untuk singleton yang ditentukan pengguna.

Berlaku untuk