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

Esempio di codice seguente viene illustrato come utilizzare il SessionMode proprietà del ServiceContractAttribute per specificare che il IMyService contratto di servizio richiede che le associazioni 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
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 altre informazioni sulle sessioni, vedere utilizzando le sessioni.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 il SessionMode viene impostata su consentita e il ServiceBehaviorAttribute.InstanceContextMode è impostata su System.ServiceModel.InstanceContextMode, un client può usare un'associazione che supporta le sessioni affidabili per eseguire chiamate ripetute allo stesso oggetto servizio.For example, if the SessionMode property is set to Allowed and the ServiceBehaviorAttribute.InstanceContextMode property is set to System.ServiceModel.InstanceContextMode, 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 di 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 di canale senza sessione: Viene generata un'eccezione.- Behavior with sessionless channel: An exception is thrown.
-Comportamento di 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 di canale senza sessione: Un System.ServiceModel.InstanceContext per ogni chiamata.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each call.
-Comportamento di canale con sessione: Viene generata un'eccezione.- Behavior with sessionful channel: An exception is thrown.
-Comportamento di canale senza sessione: Un System.ServiceModel.InstanceContext per ogni chiamata.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each call.
PerSessionPerSession -Comportamento di 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 di canale senza sessione: Viene generata un'eccezione.- Behavior with sessionless channel: An exception is thrown.
-Comportamento di 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 di canale senza sessione: Un System.ServiceModel.InstanceContext per ogni chiamata.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each call.
-Comportamento di canale con sessione: Viene generata un'eccezione.- Behavior with sessionful channel: An exception is thrown.
-Comportamento di canale senza sessione: Un System.ServiceModel.InstanceContext per ogni chiamata.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each call.
SingleSingle -Comportamento di canale con sessione: Un'unica sessione e quello System.ServiceModel.InstanceContext per tutte le chiamate.- Behavior with sessionful channel: One session and one System.ServiceModel.InstanceContext for all calls.
-Comportamento di canale senza sessione: Viene generata un'eccezione.- Behavior with sessionless channel: An exception is thrown.
-Comportamento di 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 di canale senza sessione: Un System.ServiceModel.InstanceContext 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 di canale con sessione: Viene generata un'eccezione.- Behavior with sessionful channel: An exception is thrown.
-Comportamento di canale senza sessione: Un System.ServiceModel.InstanceContext 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