ServiceContractAttribute.SessionMode Eigenschap

Definitie

Hiermee haalt u op of stelt u in of sessies zijn toegestaan, niet toegestaan of vereist.

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

Waarde van eigenschap

Een SessionMode die aangeeft of sessies zijn toegestaan, niet zijn toegestaan of vereist.

Uitzonderingen

De waarde is geen van de SessionMode waarden.

Voorbeelden

Het volgende servicecontract vereist dat geconfigureerde bindingen sessies gebruiken bij interactie met SampleDuplexHello service-implementaties.

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

Opmerkingen

Gebruik de SessionMode eigenschap om bindingen te vereisen die sessies tussen eindpunten ondersteunen. Een sessie is een manier om een set berichten te correleren die worden uitgewisseld tussen twee of meer eindpunten. Als uw service kanaalsessies ondersteunt, kunt u de InstanceContextMode eigenschap gebruiken om de relatie op te geven tussen exemplaren van de implementatie van uw servicecontract en de kanaalsessie. Als een binding geen ondersteuning biedt voor sessies, wordt er een uitzondering gegenereerd.

Als de SessionMode eigenschap bijvoorbeeld is ingesteld SessionMode.Required op en de InstanceContextMode eigenschap is ingesteld op PerSession, kunnen clients dezelfde verbinding gebruiken om herhaalde aanroepen naar hetzelfde serviceobject uit te voeren.

Zie Sessies en sessies, instancing en gelijktijdigheid gebruiken voor meer informatie over sessies en service-exemplaren.

Note

Een kanaal dat sessies ondersteunt, ondersteunt de standaardkoppeling van een service-exemplaar met een bepaalde sessie. Verschillende sessie-implementaties ondersteunen echter verschillende functies, naast het beheer van sessiegebaseerde instancing. WCF biedt vier soorten sessies die u kunt gebruiken om sessievol toepassingsgedrag te bieden; elk type sessie biedt extra gedrag dat specifiek is voor het type sessie dat het is.

  1. De System.ServiceModel.Channels.SecurityBindingElement ondersteuning biedt ondersteuning voor beveiligingssessies, waarbij beide uiteinden van de communicatie overeenstemming hebben bereikt over een versleutelings- en/of digitale handtekeningproces; alle berichten worden gecorreleerd met dat specifieke beveiligde gesprek. Voor meer informatie, zie Services beveiligen. Het , dat bijvoorbeeld System.ServiceModel.WSHttpBindingondersteuning voor zowel beveiligingssessies als betrouwbare sessies bevat, gebruikt standaard alleen een beveiligde sessie die berichten versleutelt en digitaal ondertekent.

  2. De System.ServiceModel.NetTcpBinding ondersteuning biedt ondersteuning voor de sessies die beschikbaar worden gesteld door de TCP/IP-verbindingen om ervoor te zorgen dat alle berichten worden gecorreleerd door de verbindingssessie op socketniveau.

  3. De System.ServiceModel.Channels.ReliableSessionBindingElement, waarmee de WS-ReliableMessaging specificatie wordt geïmplementeerd, biedt ondersteuning voor betrouwbare sessies waarin berichten op volgorde en precies één keer worden bezorgd, waardoor het vertrouwen ook mogelijk is wanneer berichten tijdens het gesprek over meerdere knooppunten lopen. Zie Reliable Sessions voor meer informatie.

  4. Het System.ServiceModel.NetMsmqBinding biedt MSMQ-datagramsessies. Zie Wachtrijen in WCF voor meer informatie.

Houd er rekening mee dat het instellen van de SessionMode eigenschap niet het type sessie opgeeft dat het contract vereist, maar dat er slechts één nodig is.

Van toepassing op