SessionMode Enumeráció

Definíció

Megadja azokat az értékeket, amelyek jelzik a szerződés által igényelt vagy támogatott megbízható munkamenetek támogatását.

public enum class SessionMode
public enum SessionMode
type SessionMode = 
Public Enum SessionMode
Öröklődés
SessionMode

Mezők

Name Érték Description
Allowed 0

Megadja, hogy a szerződés támogatja-e a munkameneteket, ha a bejövő kötés támogatja őket.

Required 1

Megadja, hogy a szerződéshez munkamenet-kötés szükséges. Kivétel akkor történik, ha a kötés nincs konfigurálva a munkamenet támogatásához.

NotAllowed 2

Meghatározza, hogy a szerződés soha nem támogatja a munkameneteket kezdeményező kötéseket.

Példák

Az alábbi példakód bemutatja, hogyan használható a SessionMode szolgáltatásszerződés tulajdonsága ServiceContractAttribute annak meghatározására, hogy a IMyService szolgáltatásszerződéshez munkamenet-állapotot támogató kötések szükségesek.

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

Megjegyzések

SessionMode A tulajdonság enumerálásával ServiceContractAttribute.SessionMode megkövetelheti, engedélyezheti vagy tilthatja a kötéseket a szolgáltatásszerződéshez csatlakozó vagy támogató végpontok közötti munkamenetek használatához. A munkamenetek a két vagy több végpont között kicserélt üzenetek egy csoportjának korrelációját jelzik. A munkamenetekről további információt a Munkamenetek használata című témakörben talál.

Ha a szolgáltatás támogatja a munkameneteket, a ServiceBehaviorAttribute.InstanceContextMode tulajdonság használatával megadhatja a szolgáltatási szerződés implementálásának példányai és a csatorna munkamenete közötti kapcsolatot.

Ha például a ServiceContractAttribute.SessionMode tulajdonság értéke Allowed és a ServiceBehaviorAttribute.InstanceContextMode tulajdonság értéke van beállítva InstanceContextMode.PerSession, az ügyfél használhat egy olyan kötést, amely támogatja a megbízható munkameneteket, hogy ismétlődő hívásokat kezdeményezhessenek ugyanahhoz a szolgáltatásobjektumhoz.

Mivel a munkamenet az alkalmazásmodell által használt csatornaszintű fogalom, a szerződés enumerálása és a SessionMode tulajdonság közötti ServiceBehaviorAttribute.InstanceContextMode interakció szabályozza a csatornák és adott szolgáltatásobjektumok közötti társítást.

Az alábbi táblázat egy megbízható munkameneteket támogató bejövő csatorna eredményét mutatja be, vagy nem támogatja a megbízható munkameneteket, mivel a szolgáltatás a tulajdonság és a ServiceContractAttribute.SessionMode tulajdonság értékeinek ServiceBehaviorAttribute.InstanceContextMode kombinációját adja.

InstanceContextMode érték Szükséges Engedélyezett Nem engedélyezett
PerCall - Viselkedés munkamenet-csatornával: Egy munkamenet és System.ServiceModel.InstanceContext minden híváshoz.
- Viselkedés munkamenet nélküli csatornával: A rendszer kivételt jelez.
- Viselkedés munkamenet-csatornával: Egy munkamenet és System.ServiceModel.InstanceContext minden híváshoz.
- Viselkedés munkamenet nélküli csatornával: Egy System.ServiceModel.InstanceContext tartozik minden híváshoz.
- Viselkedés munkamenet-csatornával: A rendszer kivételt jelez.
- Viselkedés munkamenet nélküli csatornával: Egy System.ServiceModel.InstanceContext tartozik minden híváshoz.
PerSession - Viselkedés munkamenettel rendelkező csatornával: Egy munkamenet és System.ServiceModel.InstanceContext az összes csatornához.
- Viselkedés munkamenet nélküli csatornával: A rendszer kivételt jelez.
- Viselkedés munkamenettel rendelkező csatornával: Egy munkamenet és System.ServiceModel.InstanceContext az összes csatornához.
- Viselkedés munkamenet nélküli csatornával: Egy System.ServiceModel.InstanceContext tartozik minden híváshoz.
- Viselkedés munkamenet-csatornával: A rendszer kivételt jelez.
- Viselkedés munkamenet nélküli csatornával: Egy System.ServiceModel.InstanceContext tartozik minden híváshoz.
Single - Viselkedés munkamenet-csatornával: Egy munkamenet és egy System.ServiceModel.InstanceContext az összes híváshoz.
- Viselkedés munkamenet nélküli csatornával: A rendszer kivételt jelez.
- Viselkedés munkamenet-csatornával: Egy munkamenet és System.ServiceModel.InstanceContext minden egyes létrehozott egyton vagy a felhasználó által megadott singleton esetében.
- Viselkedés munkamenet nélküli csatornával: Minden System.ServiceModel.InstanceContext egyes létrehozott szinguleton vagy a felhasználó által megadott szinguletonra vonatkozó viselkedés.
- Viselkedés munkamenet-csatornával: A rendszer kivételt jelez.
- Viselkedés munkamenet nélküli csatornával: Minden System.ServiceModel.InstanceContext egyes létrehozott szinguleton vagy a felhasználó által megadott szinguletonra vonatkozó viselkedés.

A következőre érvényes: