ServiceContractAttribute.SessionMode Özellik

Tanım

Oturumlara izin verilip verilmeyeceğini veya gerekli olup olmadığını alır veya ayarlar.

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

Özellik Değeri

SessionMode

SessionMode Oturumlara izin verilip verilmeyeceğini veya gerekli olup olmadığını gösteren bir.

Özel durumlar

Değer değerlerden SessionMode biri değildir.

Örnekler

Aşağıdaki hizmet sözleşmesi, yapılandırılmış bağlamaların hizmet uygulamalarıyla SampleDuplexHello etkileşim kurarken oturumları kullanmasını gerektirir.

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

SessionMode Uç noktalar arasındaki oturumları destekleyen bağlamalar gerektirmek için özelliğini kullanın. Oturum, iki veya daha fazla uç nokta arasında değiş tokuş edilen bir ileti kümesini ilişkilendirmenin bir yoludur. Hizmetiniz kanal oturumlarını destekliyorsa, hizmet sözleşmesi uygulamanızla kanal oturumu arasındaki ilişkiyi belirtmek için özelliğini kullanabilirsiniz InstanceContextMode . Bağlama oturumları desteklemiyorsa, bir özel durum oluşturulur.

Örneğin, özelliği olarak ve SessionMode.Required InstanceContextMode özelliği olarak ayarlanırsa SessionMode PerSession, istemciler aynı hizmet nesnesine yinelenen çağrılar yapmak için aynı bağlantıyı kullanabilir.

Oturumlar ve hizmet örnekleri hakkında daha fazla bilgi için bkz. Oturumları ve Oturumları Kullanma, Oturum Açma ve Eşzamanlılık.

Not

Oturumları destekleyen bir kanal, bir hizmet örneğinin belirli bir oturumla varsayılan ilişkilendirmesini destekler. Bununla birlikte, farklı oturum uygulamaları oturum tabanlı boyutlandırma denetimine ek olarak farklı özellikleri destekler. WCF, oturumlu uygulama davranışı sağlamak için kullanabileceğiniz dört tür oturum sağlar; her oturum türü, olduğu oturum türüne özgü ek davranış sağlar.

  1. , System.ServiceModel.Channels.SecurityBindingElement iletişimin her iki ucunun da bir şifreleme ve/veya dijital imza işlemi üzerinde anlaşmaya vardığı güvenlik oturumlarını destekler; tüm iletiler bu özel güvenli konuşmayla ilişkilendirilir. Daha fazla bilgi için bkz . Hizmetlerin Güvenliğini Sağlama. Örneğin, System.ServiceModel.WSHttpBindinghem güvenlik oturumları hem de güvenilir oturumlar için destek içeren , varsayılan olarak yalnızca iletileri şifreleyen ve dijital olarak imzalayan güvenli bir oturum kullanır.

  2. , System.ServiceModel.NetTcpBinding tüm iletilerin yuva düzeyindeki bağlantı oturumuyla ilişkilendirildiğinden emin olmak için TCP/IP bağlantıları tarafından sunulan oturumları destekler.

  3. System.ServiceModel.Channels.ReliableSessionBindingElementWS-ReliableMessaging belirtimini uygulayan , iletilerin sırayla ve tam olarak bir kez teslim edilen güvenilir oturumlar için destek sağlayarak konuşma sırasında iletiler birden çok düğüm arasında hareket ettiğinde bile güven sağlar. Daha fazla bilgi için bkz . Güvenilir Oturumlar.

  4. MSMQ System.ServiceModel.NetMsmqBinding veri birimi oturumları sağlar. Daha fazla bilgi için bkz. WCF'de kuyruklar.

Özelliğin ayarlanmasının SessionMode sözleşmenin gerektirdiği oturum türünü belirtmediğini, yalnızca bir oturum gerektirdiğini unutmayın.

Şunlara uygulanır