Sdílet prostřednictvím


SessionMode Výčet

Definice

Určuje dostupné hodnoty označující 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

Name Hodnota Description
Allowed 0

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

Required 1

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

NotAllowed 2

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

Příklady

Následující příklad kódu ukazuje, jak použít SessionMode vlastnost ServiceContractAttribute k určení, ž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 SessionModeServiceContractAttribute.SessionMode s vlastností můžete vyžadovat, povolit nebo zakázat vazby pro použití relací 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 naleznete v části Použití relací.

Pokud vaše služba podporuje relace, můžete pomocí ServiceBehaviorAttribute.InstanceContextMode vlastnosti určit vztah mezi instancemi implementace kontraktu služby a relací kanálu.

Pokud je například ServiceContractAttribute.SessionMode vlastnost nastavena 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 Povinné Povoleno Není povoleno
PerCall - Chování s kanálem relace: Relace a System.ServiceModel.InstanceContext pro 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 pro každé volání.
- Chování s kanálem bez relace: System.ServiceModel.InstanceContext pro každé volání.
– Chování s kanálem, který udržuje stav relace: Vyvolá se výjimka.
- Chování s kanálem bez relace: System.ServiceModel.InstanceContext pro každé volání.
Persession - Chování s kanálem s relací: 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 s relací: Relace a System.ServiceModel.InstanceContext pro každý kanál.
- Chování s kanálem bez relace: System.ServiceModel.InstanceContext pro každé volání.
– Chování s kanálem, který udržuje stav relace: Vyvolá se výjimka.
- Chování s kanálem bez relace: System.ServiceModel.InstanceContext pro každé volání.
Single - 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ždý vytvořený singleton nebo pro uživatelem zadaný singleton.
- Chování s kanálem bez relace: Pro každý vytvořený System.ServiceModel.InstanceContext singleton nebo pro uživatelem zadaný singleton.
– Chování s kanálem, který udržuje stav relace: Vyvolá se výjimka.
- Chování s kanálem bez relace: Pro každý vytvořený System.ServiceModel.InstanceContext singleton nebo pro uživatelem zadaný singleton.

Platí pro