Share via


ServiceContractAttribute.SessionMode Properti

Definisi

Mendapatkan atau mengatur apakah sesi diizinkan, tidak diizinkan atau diperlukan.

public:
 property System::ServiceModel::SessionMode SessionMode { System::ServiceModel::SessionMode get(); void set(System::ServiceModel::SessionMode value); };
public System.ServiceModel.SessionMode SessionMode { get; set; }
member this.SessionMode : System.ServiceModel.SessionMode with get, set
Public Property SessionMode As SessionMode

Nilai Properti

SessionMode yang menunjukkan apakah sesi diizinkan, tidak diizinkan, atau diperlukan.

Pengecualian

Nilai bukan salah SessionMode satu nilai.

Contoh

Kontrak layanan berikut mengharuskan pengikatan yang dikonfigurasi menggunakan sesi saat berinteraksi dengan SampleDuplexHello implementasi layanan.

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 properti untuk memerlukan pengikatan yang mendukung sesi antar titik akhir. Sesi adalah cara untuk menghubungkan sekumpulan pesan yang dipertukarkan antara dua titik akhir atau lebih. Jika layanan Anda mendukung sesi saluran, Anda kemudian dapat menggunakan InstanceContextMode properti untuk menentukan hubungan antara instans implementasi kontrak layanan Anda dan sesi saluran. Jika pengikatan tidak mendukung sesi, pengecualian akan dilemparkan.

Misalnya, jika SessionMode properti diatur ke SessionMode.Required dan InstanceContextMode properti diatur ke PerSession, klien dapat menggunakan koneksi yang sama untuk melakukan panggilan berulang ke objek layanan yang sama.

Untuk informasi selengkapnya tentang sesi dan instans layanan, lihat Menggunakan Sesi dan Sesi, Instancing, dan Konkurensi.

Catatan

Saluran yang mendukung sesi mendukung asosiasi default instans layanan dengan sesi tertentu. Namun, implementasi sesi yang berbeda mendukung fitur yang berbeda selain kontrol instancing berbasis sesi. WCF menyediakan empat jenis sesi yang dapat Anda gunakan untuk menyediakan perilaku aplikasi yang penuh sesi; setiap jenis sesi menyediakan perilaku tambahan khusus untuk jenis sesinya.

  1. Mendukung System.ServiceModel.Channels.SecurityBindingElement sesi keamanan, di mana kedua ujung komunikasi telah menyepakati proses enkripsi dan/atau tanda tangan digital; semua pesan berkorelasi dengan percakapan aman tertentu tersebut. Untuk informasi selengkapnya, lihat Mengamankan Layanan. Misalnya, System.ServiceModel.WSHttpBinding, yang berisi dukungan untuk sesi keamanan dan sesi yang andal, secara default hanya menggunakan sesi aman yang mengenkripsi dan menandatangani pesan secara digital.

  2. System.ServiceModel.NetTcpBinding mendukung sesi yang diekspos oleh koneksi TCP/IP untuk memastikan bahwa semua pesan berkorelasi dengan sesi koneksi di tingkat soket.

  3. System.ServiceModel.Channels.ReliableSessionBindingElement, yang mengimplementasikan spesifikasi WS-ReliableMessaging, memberikan dukungan untuk sesi yang andal di mana pesan dikirimkan secara berurutan dan tepat sekali, memungkinkan kepercayaan diri bahkan ketika pesan melintasi beberapa simpul selama percakapan. Untuk informasi selengkapnya, lihat Sesi Andal.

  4. menyediakan System.ServiceModel.NetMsmqBinding sesi datagram MSMQ. Untuk informasi selengkapnya, lihat Antrean di WCF.

Ingat bahwa pengaturan SessionMode properti tidak menentukan jenis sesi yang diperlukan kontrak, hanya memerlukannya.

Berlaku untuk