Condividi tramite


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à

Oggetto SessionMode che indica se le sessioni sono consentite, non consentite o obbligatorie.

Eccezioni

Il valore non è uno dei SessionMode valori.

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. Una sessione è un modo per correlare un set di messaggi scambiati tra due o più endpoint. Se il servizio supporta le sessioni di canale, è possibile usare la InstanceContextMode proprietà per specificare la relazione tra le istanze di 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 SessionMode proprietà è impostata su SessionMode.Required e la InstanceContextMode proprietà è impostata su PerSession, i client possono utilizzare la stessa connessione per effettuare chiamate ripetute allo stesso oggetto servizio.

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

Annotazioni

Un canale che supporta le sessioni supporta l'associazione predefinita di un'istanza del servizio a una sessione specifica. Tuttavia, diverse implementazioni di sessione supportano diverse funzionalità oltre al controllo di istanze basato su sessione. WCF fornisce quattro tipi di sessioni che è possibile usare per fornire un comportamento di applicazione con sessione; ogni tipo di sessione fornisce un comportamento aggiuntivo specifico per il tipo di sessione.

  1. System.ServiceModel.Channels.SecurityBindingElement supporta le sessioni di sicurezza, in cui entrambe le estremità della comunicazione hanno concordato 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 sia per le sessioni di sicurezza che per le sessioni affidabili, per impostazione predefinita usa solo una sessione sicura che crittografa e firma digitalmente i messaggi.

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

  3. , System.ServiceModel.Channels.ReliableSessionBindingElementche implementa la specifica WS-ReliableMessaging, fornisce il supporto per sessioni affidabili in cui i messaggi vengono recapitati in ordine e esattamente una volta, abilitando la confidenza anche quando i messaggi si spostano 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 richiesta dal contratto, ma solo che ne richiede uno.

Si applica a