ServiceContractAttribute.SessionMode Właściwość

Definicja

Pobiera lub ustawia, czy sesje są dozwolone, niedozwolone lub wymagane.

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

Wartość właściwości

Element SessionMode wskazujący, czy sesje są dozwolone, niedozwolone, czy wymagane.

Wyjątki

Wartość nie jest jedną z SessionMode wartości.

Przykłady

Poniższy kontrakt usługi wymaga, aby skonfigurowane powiązania używały sesji podczas interakcji z implementacjami SampleDuplexHello usług.

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

Uwagi

SessionMode Użyj właściwości , aby wymagać powiązań, które obsługują sesje między punktami końcowymi. Sesja to sposób korelowania zestawu komunikatów wymienianych między co najmniej dwoma punktami końcowymi. Jeśli usługa obsługuje sesje kanału, możesz użyć InstanceContextMode właściwości , aby określić relację między wystąpieniami implementacji kontraktu usługi a sesją kanału. Jeśli powiązanie nie obsługuje sesji, zgłaszany jest wyjątek.

Jeśli na przykład SessionMode właściwość jest ustawiona na SessionMode.Required , a InstanceContextMode właściwość jest ustawiona na PerSession, klienci mogą używać tego samego połączenia, aby wykonywać powtarzające się wywołania do tego samego obiektu usługi.

Aby uzyskać więcej informacji na temat sesji i wystąpień usług, zobacz Using Sessions and Sessions , Instancing and Concurrency (Używanie sesji i sesji, tworzenia wystąpień i współbieżności).

Uwaga

Kanał obsługujący sesje obsługuje domyślne skojarzenie wystąpienia usługi z określoną sesją. Jednak różne implementacje sesji obsługują różne funkcje oprócz kontroli stancingu opartej na sesji. Program WCF udostępnia cztery typy sesji, których można użyć do zapewnienia zachowania aplikacji sesji; każdy typ sesji zapewnia dodatkowe zachowanie specyficzne dla typu sesji.

  1. Program System.ServiceModel.Channels.SecurityBindingElement obsługuje sesje zabezpieczeń, w których oba końce komunikacji uzgodniły proces szyfrowania i/lub podpisu cyfrowego. Wszystkie wiadomości są skorelowane z daną bezpieczną konwersacją. Aby uzyskać więcej informacji, zobacz Zabezpieczanie usług. Na przykład , System.ServiceModel.WSHttpBindingktóry zawiera obsługę zarówno sesji zabezpieczeń, jak i niezawodnych sesji, domyślnie używa tylko bezpiecznej sesji, która szyfruje i podpisuje cyfrowo komunikaty.

  2. Program System.ServiceModel.NetTcpBinding obsługuje sesje uwidocznione przez połączenia TCP/IP, aby upewnić się, że wszystkie komunikaty są skorelowane przez sesję połączenia na poziomie gniazda.

  3. Element System.ServiceModel.Channels.ReliableSessionBindingElement, który implementuje specyfikację WS-ReliableMessaging, zapewnia obsługę niezawodnych sesji, w których komunikaty są dostarczane w kolejności i dokładnie raz, umożliwiając pewność, nawet gdy komunikaty są przesyłane między wieloma węzłami podczas konwersacji. Aby uzyskać więcej informacji, zobacz Sesje niezawodne.

  4. Element System.ServiceModel.NetMsmqBinding udostępnia sesje datagramu MSMQ. Aby uzyskać więcej informacji, zobacz Kolejki w programie WCF.

Należy pamiętać, że ustawienie SessionMode właściwości nie określa typu sesji wymaganej przez kontrakt, tylko że wymaga jednej.

Dotyczy