ServiceContractAttribute.SessionMode Właściwość

Definicja

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

C#
public System.ServiceModel.SessionMode SessionMode { get; set; }

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.

C#
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);
    }
  }
}

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

Produkt Wersje
.NET 8 (package-provided), 9 (package-provided), 10 (package-provided)
.NET Framework 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0 (package-provided)