ServiceContractAttribute.SessionMode Proprietà

Definizione

Consente di ottenere o impostare un valore che stabilisce se le sessioni sono consentite, non consentite oppure obbligatorie.

public:
 property System::ServiceModel::SessionMode SessionMode { System::ServiceModel::SessionMode get(); void set(System::ServiceModel::SessionMode value); };
public System.ServiceModel.SessionMode SessionMode { get; set; }
member this.SessionMode : System.ServiceModel.SessionMode with get, set
Public Property SessionMode As SessionMode

Valore della proprietà

SessionMode

Oggetto SessionMode che stabilisce se le sessioni sono consentite, non consentite oppure obbligatorie.

Eccezioni

Il valore non appartiene all'enumerazione SessionMode.

Esempio

Il contratto di servizio seguente richiede che le associazioni configurate usino sessioni durante l'interazione con SampleDuplexHello le implementazioni del servizio.

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

Usare la SessionMode proprietà per richiedere associazioni che supportano sessioni tra endpoint. Mediante una sessione è possibile correlare un set di messaggi scambiati tra due o più endpoint. Se il servizio supporta le sessioni del canale, è possibile usare la InstanceContextMode proprietà per specificare la relazione tra istanze dell'implementazione del contratto di servizio e la sessione del canale. Se un'associazione non supporta le sessioni viene generata un'eccezione.

Ad esempio, se la proprietà è impostata su SessionMode.Required e la SessionMode InstanceContextMode proprietà è impostata su PerSession, i client possono usare la stessa connessione per eseguire chiamate ripetute allo stesso oggetto servizio.

Per altre informazioni sulle sessioni e le istanze del servizio, vedere Uso di sessioni e sessioni, instancing e concorrenza.

Nota

Un canale che supporta le sessioni supporta l'associazione predefinita fra un'istanza di servizio e una determinata sessione. Tuttavia, oltre al controllo della creazione delle istanze basato sulle sessioni, ogni implementazione di sessione supporta funzionalità specifiche. WCF offre quattro tipi di sessioni che è possibile usare per fornire un comportamento dell'applicazione sessione; ogni tipo di sessione fornisce un comportamento aggiuntivo specifico per il tipo di sessione.

  1. Supporta System.ServiceModel.Channels.SecurityBindingElement le sessioni di sicurezza, in cui entrambe le estremità della comunicazione hanno concordato su un processo di crittografia e/o firma digitale; tutti i messaggi sono correlati a quella conversazione sicura specifica. Per altre informazioni, vedere Protezione dei servizi. Ad esempio, , System.ServiceModel.WSHttpBindingche contiene il supporto per sessioni di sicurezza e sessioni affidabili, per impostazione predefinita usa solo una sessione sicura che crittografa e firma digitalmente i messaggi.

  2. Supporta System.ServiceModel.NetTcpBinding le sessioni esposte dalle connessioni TCP/IP per garantire che tutti i messaggi siano correlati dalla sessione di connessione a livello di socket.

  3. Il System.ServiceModel.Channels.ReliableSessionBindingElement, che implementa la specifica di WS-ReliableMessaging, fornisce supporto per sessioni affidabili in cui i messaggi vengono recapitati in ordine e esattamente una volta, abilitando la fiducia anche quando i messaggi vengono distribuiti tra più nodi durante la conversazione. Per altre informazioni, vedere Sessioni affidabili.

  4. Fornisce System.ServiceModel.NetMsmqBinding sessioni di datagrammi MSMQ. Per altre informazioni, vedere Code in WCF.

Tenere presente che l'impostazione della SessionMode proprietà non specifica il tipo di sessione richiesto dal contratto, solo che richiede uno.

Si applica a