Sdílet prostřednictvím


ServiceContractAttribute.SessionMode Vlastnost

Definice

Získá nebo nastaví, zda jsou relace povoleny, nejsou povoleny nebo požadovány.

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

Hodnota vlastnosti

SessionMode

A SessionMode , která označuje, jestli jsou relace povolené, nepovolené nebo povinné.

Výjimky

Hodnota není jednou z SessionMode hodnot.

Příklady

Následující kontrakt služby vyžaduje, aby nakonfigurované vazby používaly relace při interakci s implementacemi SampleDuplexHello služeb.

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

Poznámky

SessionMode Vlastnost použijte k vyžadování vazeb, které podporují relace mezi koncovými body. Relace je způsob korelace sady zpráv vyměňovaných mezi dvěma nebo více koncovými body. Pokud vaše služba podporuje relace kanálu, můžete pomocí InstanceContextMode vlastnosti určit vztah mezi instancemi implementace kontraktu služby a relací kanálu. Pokud vazba nepodporuje relace, vyvolá se výjimka.

Pokud je například SessionMode vlastnost nastavena a SessionMode.Required InstanceContextMode vlastnost je nastavena na PerSession, klienti mohou použít stejné připojení k provádění opakovaných volání stejného objektu služby.

Další informace o relacích a instancích služeb naleznete v tématu Použití relací a relací, instancí a souběžnosti.

Poznámka

Kanál, který podporuje relace, podporuje výchozí přidružení instance služby k určité relaci. Různé implementace relací ale podporují kromě řízení instancí na základě relace různé funkce. WCF poskytuje čtyři typy relací, které můžete použít k zajištění chování aplikace v relaci; každý typ relace poskytuje další chování specifické pro typ relace, je to.

  1. Podporuje System.ServiceModel.Channels.SecurityBindingElement bezpečnostní relace, ve kterých se oba konce komunikace dohodly na šifrování a/nebo procesu digitálního podpisu. Všechny zprávy jsou korelovány s danou zabezpečenou konverzací. Další informace naleznete v tématu Zabezpečení služeb. System.ServiceModel.WSHttpBindingNapříklad , který obsahuje podporu pro relace zabezpečení i spolehlivé relace, ve výchozím nastavení používá pouze zabezpečenou relaci, která šifruje a digitálně podepisuje zprávy.

  2. Podporuje System.ServiceModel.NetTcpBinding relace vystavené připojením TCP/IP, aby se zajistilo, že všechny zprávy jsou korelovány relací připojení na úrovni soketu.

  3. Rozhraní System.ServiceModel.Channels.ReliableSessionBindingElement, které implementuje specifikaci WS-ReliableMessaging, poskytuje podporu spolehlivých relací, ve kterých jsou zprávy doručeny v pořadí a přesně jednou, což umožňuje jistotu, i když zprávy během konverzace cestují mezi více uzly. Další informace naleznete v tématu Spolehlivé relace.

  4. Poskytuje System.ServiceModel.NetMsmqBinding relace datagramu MSMQ. Další informace najdete v tématu Fronty ve WCF.

Mějte na SessionMode paměti, že nastavení vlastnosti nezadá typ relace, kterou kontrakt vyžaduje, pouze to, že vyžaduje jednu.

Platí pro