Sdílet prostřednictvím


SessionMode Výčet

Definice

Určuje dostupné hodnoty, které označují podporu spolehlivých relací, které kontrakt vyžaduje nebo podporuje.

public enum class SessionMode
public enum SessionMode
type SessionMode = 
Public Enum SessionMode
Dědičnost
SessionMode

Pole

Allowed 0

Určuje, že kontrakt podporuje relace, pokud je příchozí vazba podporuje.

NotAllowed 2

Určuje, že kontrakt nikdy nepodporuje vazby, které iniciují relace.

Required 1

Určuje, že kontrakt vyžaduje relaci. Pokud není vazba nakonfigurovaná tak, aby podporovala relaci, vyvolá se výjimka.

Příklady

Následující příklad kódu ukazuje, jak použít SessionMode vlastnost ServiceContractAttribute určující, že IMyService kontrakt služby vyžaduje vazby, které podporují stav relace.

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

Pomocí výčtu SessionMode ServiceContractAttribute.SessionMode s vlastností vyžadovat, povolit nebo zakázat vazby používat relace mezi koncovými body, které se připojují nebo podporují kontrakt služby. Relace je způsob korelace sady zpráv vyměňovaných mezi dvěma nebo více koncovými body. Další informace o relacích najdete v tématu Použití relací.

Pokud vaše služba podporuje relace, můžete vlastnost použít ServiceBehaviorAttribute.InstanceContextMode k určení vztahu mezi instancemi implementace kontraktu služby a relací kanálu.

Pokud ServiceContractAttribute.SessionMode je například vlastnost nastavená a ServiceBehaviorAttribute.InstanceContextMode vlastnost je nastavena Allowed na InstanceContextMode.PerSession, klient může použít vazbu, která podporuje spolehlivé relace k provádění opakovaných volání stejného objektu služby.

Vzhledem k tomu, že relace je koncept na úrovni kanálu, který model aplikace používá, existuje interakce mezi výčtem ve smlouvě a ServiceBehaviorAttribute.InstanceContextMode vlastností, která řídí přidružení mezi SessionMode kanály a konkrétními objekty služby.

Následující tabulka ukazuje výsledek příchozího kanálu, který podporuje spolehlivé relace nebo nepodporuje spolehlivé relace s ohledem na kombinaci hodnot ServiceContractAttribute.SessionMode vlastnosti a ServiceBehaviorAttribute.InstanceContextMode vlastnosti služby.

InstanceContextMode – hodnota Vyžadováno Povoleno NotAllowed
PerCall – Chování s kanálem relace: Relace a System.ServiceModel.InstanceContext každé volání.
– Chování s kanálem bez relace: Vyvolá se výjimka.
– Chování s kanálem relace: Relace a System.ServiceModel.InstanceContext každé volání.
- Chování s kanálem bez relace: Pro System.ServiceModel.InstanceContext každé volání.
– Chování s kanálem relace: Vyvolá se výjimka.
- Chování s kanálem bez relace: Pro System.ServiceModel.InstanceContext každé volání.
Persession – Chování s kanálem relace: Relace a System.ServiceModel.InstanceContext pro každý kanál.
– Chování s kanálem bez relace: Vyvolá se výjimka.
– Chování s kanálem relace: Relace a System.ServiceModel.InstanceContext pro každý kanál.
- Chování s kanálem bez relace: Pro System.ServiceModel.InstanceContext každé volání.
– Chování s kanálem relace: Vyvolá se výjimka.
- Chování s kanálem bez relace: Pro System.ServiceModel.InstanceContext každé volání.
Jednoduché - Chování s kanálem relace: Jedna relace a jedna System.ServiceModel.InstanceContext pro všechna volání.
– Chování s kanálem bez relace: Vyvolá se výjimka.
– Chování s kanálem relace: Relace a System.ServiceModel.InstanceContext pro každou vytvořenou jednoúčelovou relaci nebo pro uživatelem zadaný singleton.
– Chování s kanálem bez relace: Pro System.ServiceModel.InstanceContext každý vytvořený singleton nebo pro uživatelem zadaný singleton.
– Chování s kanálem relace: Vyvolá se výjimka.
– Chování s kanálem bez relace: Pro System.ServiceModel.InstanceContext každý vytvořený singleton nebo pro uživatelem zadaný singleton.

Platí pro