ServiceContractAttribute.SessionMode Egenskap

Definition

Hämtar eller anger huruvida sessioner tillåts, inte tillåts eller krävs.

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

Egenskapsvärde

Ett SessionMode som anger om sessioner tillåts, inte tillåts eller krävs.

Undantag

Värdet är inte ett av SessionMode värdena.

Exempel

Följande tjänstkontrakt kräver att konfigurerade bindningar använder sessioner när de interagerar med SampleDuplexHello tjänstimplementeringar.

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

Kommentarer

Använd egenskapen SessionMode för att kräva bindningar som stöder sessioner mellan slutpunkter. En session är ett sätt att korrelera en uppsättning meddelanden som utbyts mellan två eller flera slutpunkter. Om din tjänst stöder kanalsessioner kan du använda InstanceContextMode egenskapen för att ange relationen mellan instanser av tjänstkontraktets implementering och kanalsessionen. Om en bindning inte stöder sessioner genereras ett undantag.

Om SessionMode egenskapen till exempel är inställd på SessionMode.Required och InstanceContextMode egenskapen är inställd på PerSessionkan klienter använda samma anslutning för att göra upprepade anrop till samma tjänstobjekt.

Mer information om sessioner och tjänstinstanser finns i Använda sessioner och sessioner, instancing och samtidighet.

Note

En kanal som stöder sessioner stöder standardassociationen för en tjänstinstans med en viss session. Olika sessionsimplementeringar stöder dock olika funktioner utöver sessionsbaserad instancing-kontroll. WCF innehåller fyra typer av sessioner som du kan använda för att tillhandahålla sessionskänsligt programbeteende. varje typ av session ger ytterligare beteende som är specifikt för vilken typ av session det är.

  1. Stöder System.ServiceModel.Channels.SecurityBindingElement säkerhetssessioner, där båda kommunikationssluten har kommit överens om en krypterings- och/eller digital signaturprocess. Alla meddelanden är korrelerade med den specifika säkra konversationen. Mer information finns i Skydda tjänster. Till exempel , System.ServiceModel.WSHttpBindingsom innehåller stöd för både säkerhetssessioner och tillförlitliga sessioner, använder som standard endast en säker session som krypterar och digitalt signerar meddelanden.

  2. System.ServiceModel.NetTcpBinding Stöder de sessioner som exponeras av TCP/IP-anslutningarna för att säkerställa att alla meddelanden korreleras av anslutningssessionen på socketnivå.

  3. , System.ServiceModel.Channels.ReliableSessionBindingElementsom implementerar WS-ReliableMessaging-specifikationen, ger stöd för tillförlitliga sessioner där meddelanden levereras i ordning och exakt en gång, vilket ger förtroende även när meddelanden färdas över flera noder under konversationen. Mer information finns i Tillförlitliga sessioner.

  4. Tillhandahåller System.ServiceModel.NetMsmqBinding MSMQ-datagramsessioner. Mer information finns i Köer i WCF.

Kom ihåg att inställningen av SessionMode egenskapen inte anger vilken typ av session kontraktet kräver, bara att det kräver en.

Gäller för