Aracılığıyla paylaş


SessionMode Sabit listesi

Tanım

Bir sözleşmenin gerektirdiği veya desteklediği güvenilir oturumların desteğini göstermek için kullanılabilir değerleri belirtir.

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

Alanlar

Name Değer Description
Allowed 0

Gelen bağlama bunları destekliyorsa sözleşmenin oturumları desteklediğini belirtir.

Required 1

Sözleşmenin oturumlu bağlama gerektirdiğini belirtir. Bağlama oturumu destekleyecek şekilde yapılandırılmamışsa bir özel durum oluşturulur.

NotAllowed 2

Sözleşmenin hiçbir zaman oturum başlatan bağlamaları desteklemediğini belirtir.

Örnekler

Aşağıdaki kod örneği, hizmet sözleşmesinin SessionModeServiceContractAttribute oturum durumunu destekleyen bağlamalar gerektirdiğini belirtmek IMyService için özelliğinin nasıl kullanılacağını gösterir.

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

Açıklamalar

Hizmet sözleşmesine SessionMode bağlanan veya bu sözleşmeyi ServiceContractAttribute.SessionMode destekleyen uç noktalar arasındaki oturumları kullanmak için bağlamaları zorunlu kmak, izin vermek veya yasaklamak için numaralandırmayı özelliğiyle birlikte kullanın. Oturum, iki veya daha fazla uç nokta arasında değiş tokuş edilen bir ileti kümesini ilişkilendirmenin bir yoludur. Oturumlar hakkında daha fazla bilgi için bkz. Oturumları Kullanma.

Hizmetiniz oturumları destekliyorsa, hizmet sözleşmesi uygulamanızın ServiceBehaviorAttribute.InstanceContextMode örnekleriyle kanal oturumu arasındaki ilişkiyi belirtmek için özelliğini kullanabilirsiniz.

Örneğin, özelliği olarak ayarlanırsa Allowed ve ServiceBehaviorAttribute.InstanceContextMode özelliği olarak ayarlanırsa ServiceContractAttribute.SessionModeInstanceContextMode.PerSession, istemci aynı hizmet nesnesine yinelenen çağrılar yapmak için güvenilir oturumları destekleyen bir bağlama kullanabilir.

Oturum, uygulama modelinin kullandığı kanal düzeyinde bir kavram olduğundan, bir sözleşmedeki numaralandırma ile kanallar ve belirli hizmet nesneleri arasındaki ilişkiyi ServiceBehaviorAttribute.InstanceContextMode denetleyen özellik arasında SessionMode bir etkileşim vardır.

Aşağıdaki tabloda, gelen kanalın güvenilir oturumları desteklemesinin veya hizmetin özellik ile ServiceBehaviorAttribute.InstanceContextMode özelliğin değerlerinin birleşimini içeren güvenilir oturumları ServiceContractAttribute.SessionMode desteklememesi sonucu gösterilmektedir.

InstanceContextMode Değeri Zorunlu İzin Verilir İzin Verilmiyor
PerCall - Oturumlu kanal ile davranış: Bir oturum ve System.ServiceModel.InstanceContext her çağrı için.
- Oturumsuz kanal ile davranış: Bir istisna fırlatılır.
- Oturumlu kanal ile davranış: Bir oturum ve System.ServiceModel.InstanceContext her çağrı için.
- Oturumsuz kanal ile davranış: Her çağrı için bir System.ServiceModel.InstanceContext .
- Oturum açan kanalda davranış: Bir özel durum oluşturulur.
- Oturumsuz kanal ile davranış: Her çağrı için bir System.ServiceModel.InstanceContext .
PerSession - Oturumlu kanal ile davranış: Bir oturum ve System.ServiceModel.InstanceContext her kanal için.
- Oturumsuz kanal ile davranış: Bir istisna fırlatılır.
- Oturumlu kanal ile davranış: Bir oturum ve System.ServiceModel.InstanceContext her kanal için.
- Oturumsuz kanal ile davranış: Her çağrı için bir System.ServiceModel.InstanceContext .
- Oturum açan kanalda davranış: Bir özel durum oluşturulur.
- Oturumsuz kanal ile davranış: Her çağrı için bir System.ServiceModel.InstanceContext .
Single - Oturumlu kanal ile davranış: Bir oturum ve tüm çağrılar için bir System.ServiceModel.InstanceContext oturum.
- Oturumsuz kanal ile davranış: Bir istisna fırlatılır.
- Oturumlu kanal ile davranış: Bir oturum ve System.ServiceModel.InstanceContext oluşturulan her tekil için veya kullanıcı tarafından belirtilen tekil için.
- Oturumsuz kanal ile davranış: Oluşturulan her bir tekil için veya kullanıcı tarafından belirtilen tekil için bir System.ServiceModel.InstanceContext.
- Oturum açan kanalda davranış: Bir özel durum oluşturulur.
- Oturumsuz kanal ile davranış: Oluşturulan her bir tekil için veya kullanıcı tarafından belirtilen tekil için bir System.ServiceModel.InstanceContext.

Şunlara uygulanır