SessionMode SessionMode SessionMode SessionMode Enum

Definizione

Specifica i valori disponibili per indicare il supporto per le sessioni affidabili richieste o supportate da un contratto.Specifies the values available to indicate the support for reliable sessions that a contract requires or supports.

public enum class SessionMode
public enum SessionMode
type SessionMode = 
Public Enum SessionMode
Ereditarietà

Campi

Allowed Allowed Allowed Allowed 0

Specifica che il contratto supporta le sessioni se queste sono supportate dall'associazione in ingresso.Specifies that the contract supports sessions if the incoming binding supports them.

NotAllowed NotAllowed NotAllowed NotAllowed 2

Specifica che il contratto non supporta in alcun caso le associazioni che avviano sessioni.Specifies that the contract never supports bindings that initiate sessions.

Required Required Required Required 1

Specifica che il contratto richiede un'associazione con sessione.Specifies that the contract requires a sessionful binding. Se l'associazione è configurata in modo da non supportare le sessioni, viene generata un'eccezione.An exception is thrown if the binding is not configured to support session.

Esempi

Nell'esempio di codice seguente viene illustrato come utilizzare la proprietà SessionMode del ServiceContractAttribute per specificare che il contratto di servizio IMyService richiede binding che supportano lo stato della sessione.The following code example shows how to use the SessionMode property of the ServiceContractAttribute to specify that the IMyService service contract requires bindings that support session state.

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

Commenti

Utilizzare l'enumerazione SessionMode con la proprietà ServiceContractAttribute.SessionMode per richiedere, consentire o proibire nell'ambito di un'associazione l'utilizzo di sessioni tra endpoint connessi al contratto di servizio o che supportano tale contratto.Use the SessionMode enumeration with the ServiceContractAttribute.SessionMode property to require, allow, or prohibit bindings to use sessions between endpoints that connect to or support the service contract. Mediante una sessione è possibile correlare un set di messaggi scambiati tra due o più endpoint.A session is a way of correlating a set of messages exchanged between two or more endpoints. Per ulteriori informazioni sulle sessioni, vedere Using Sessions.For more information about sessions, see Using Sessions.

Se il servizio supporta le sessioni di canale, è possibile utilizzare la proprietà ServiceBehaviorAttribute.InstanceContextMode per specificare la relazione tra le istanze dell'implementazione del contratto di servizio e la sessione di canale.If your service supports sessions, you can then use the ServiceBehaviorAttribute.InstanceContextMode property to specify the relationship between instances of your service contract implementation and the channel session.

Ad esempio, se la proprietà ServiceContractAttribute.SessionMode è impostata su Allowed e la proprietà ServiceBehaviorAttribute.InstanceContextMode è impostata su InstanceContextMode.PerSession, un client può utilizzare un'associazione che supporta le sessioni affidabili per eseguire chiamate ripetute allo stesso oggetto servizio.For example, if the ServiceContractAttribute.SessionMode property is set to Allowed and the ServiceBehaviorAttribute.InstanceContextMode property is set to InstanceContextMode.PerSession, a client can use a binding that supports reliable sessions to make repeated calls to the same service object.

Poiché la sessione è un concetto a livello di canale utilizzato dal modello delle applicazioni, esiste un'interazione tra l'enumerazione SessionMode di un contratto e la proprietà ServiceBehaviorAttribute.InstanceContextMode che controlla l'associazione tra canali e oggetti servizio specifici.Because a session is a channel-level concept that the application model uses, there is an interaction between the SessionMode enumeration in a contract and the ServiceBehaviorAttribute.InstanceContextMode property, which controls the association between channels and specific service objects.

Nella tabella seguente viene mostrato il risultato di un canale in ingresso in cui le sessioni affidabili sono supportate o non supportate. Tale risultato è in funzione della combinazione dei valori delle proprietà ServiceContractAttribute.SessionMode e ServiceBehaviorAttribute.InstanceContextMode del servizio.The following table shows the result of an incoming channel either supporting reliable sessions or not supporting reliable sessions given a service's combination of the values of the ServiceContractAttribute.SessionMode property and the ServiceBehaviorAttribute.InstanceContextMode property.

Valore InstanceContextModeInstanceContextMode Value ObbligatorioRequired AllowedAllowed NotAllowedNotAllowed
PerCallPerCall -Comportamento con il canale con sessione: Una sessione e System.ServiceModel.InstanceContext per ogni chiamata.- Behavior with sessionful channel: A session and System.ServiceModel.InstanceContext for each call.
-Comportamento con canale senza sessione: Viene generata un'eccezione.- Behavior with sessionless channel: An exception is thrown.
-Comportamento con il canale con sessione: Una sessione e System.ServiceModel.InstanceContext per ogni chiamata.- Behavior with sessionful channel: A session and System.ServiceModel.InstanceContext for each call.
-Comportamento con canale senza sessione: @No__t-0 per ogni chiamata.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each call.
-Comportamento con il canale con sessione: Viene generata un'eccezione.- Behavior with sessionful channel: An exception is thrown.
-Comportamento con canale senza sessione: @No__t-0 per ogni chiamata.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each call.
PerSessionPerSession -Comportamento con il canale con sessione: Una sessione e System.ServiceModel.InstanceContext per ogni canale.- Behavior with sessionful channel: A session and System.ServiceModel.InstanceContext for each channel.
-Comportamento con canale senza sessione: Viene generata un'eccezione.- Behavior with sessionless channel: An exception is thrown.
-Comportamento con il canale con sessione: Una sessione e System.ServiceModel.InstanceContext per ogni canale.- Behavior with sessionful channel: A session and System.ServiceModel.InstanceContext for each channel.
-Comportamento con canale senza sessione: @No__t-0 per ogni chiamata.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each call.
-Comportamento con il canale con sessione: Viene generata un'eccezione.- Behavior with sessionful channel: An exception is thrown.
-Comportamento con canale senza sessione: @No__t-0 per ogni chiamata.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each call.
SingleSingle -Comportamento con il canale con sessione: Una sessione e una System.ServiceModel.InstanceContext per tutte le chiamate.- Behavior with sessionful channel: One session and one System.ServiceModel.InstanceContext for all calls.
-Comportamento con canale senza sessione: Viene generata un'eccezione.- Behavior with sessionless channel: An exception is thrown.
-Comportamento con il canale con sessione: Una sessione e System.ServiceModel.InstanceContext per ogni singleton creato o per il singleton specificato dall'utente.- Behavior with sessionful channel: A session and System.ServiceModel.InstanceContext for each created singleton or for the user-specified singleton.
-Comportamento con canale senza sessione: @No__t-0 per ogni singleton creato o per il singleton specificato dall'utente.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each created singleton or for the user-specified singleton.
-Comportamento con il canale con sessione: Viene generata un'eccezione.- Behavior with sessionful channel: An exception is thrown.
-Comportamento con canale senza sessione: @No__t-0 per ogni singleton creato o per il singleton specificato dall'utente.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each created singleton or for the user-specified singleton.

Si applica a