SessionMode Enum
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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
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. |