ServiceContractAttribute.SessionMode Свойство
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает или задает значение, указывающее, разрешены, запрещены или требуются ли сеансы.
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
Значение свойства
Значение, SessionMode указывающее, разрешены ли сеансы, не разрешены или обязательны.
Исключения
Значение не является одним из значений SessionMode .
Примеры
В следующем контракте службы требуется, чтобы настроенные привязки использовали сеансы при взаимодействии с SampleDuplexHello реализациями служб.
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
Комментарии
SessionMode Используйте свойство, чтобы требовать привязки, поддерживающие сеансы между конечными точками. Сеанс — это способ сопоставления набора сообщений, обменуемых между двумя или несколькими конечными точками. Если служба поддерживает сеансы каналов, можно использовать InstanceContextMode свойство для указания связи между экземплярами реализации контракта службы и сеанса канала. Если привязка не поддерживает сеансы, создается исключение.
Например, если SessionMode для свойства задано значение, а InstanceContextMode для свойства SessionMode.Required задано PerSessionзначение, клиенты могут использовать то же подключение для выполнения повторных вызовов к одному объекту службы.
Дополнительные сведения о сеансах и экземплярах служб см. в разделе Using Session and Session, Instancing и Concurrency.
Замечание
Канал, поддерживающий сеансы, поддерживает сопоставление экземпляра службы по умолчанию с определенным сеансом. Однако различные реализации сеансов поддерживают различные функции в дополнение к элементу управления на основе сеансов. WCF предоставляет четыре типа сеансов, которые можно использовать для обеспечения поведения приложений с сеансами; каждый тип сеанса обеспечивает дополнительное поведение, определенное для типа сеанса.
Поддерживаются System.ServiceModel.Channels.SecurityBindingElement сеансы безопасности, в которых оба конца связи согласованы с процессом шифрования и (или) цифровой подписи; все сообщения коррелируются с этим конкретным безопасным диалогом. Дополнительные сведения см. в разделе "Защита служб". Например, функция System.ServiceModel.WSHttpBinding, содержащая поддержку сеансов безопасности и надежных сеансов, по умолчанию использует только безопасный сеанс, который шифрует и подписывает сообщения цифровыми данными.
Поддерживает System.ServiceModel.NetTcpBinding сеансы, предоставляемые подключениями TCP/IP, чтобы убедиться, что все сообщения коррелируются сеансом подключения на уровне сокета.
Функция System.ServiceModel.Channels.ReliableSessionBindingElement, реализующая спецификацию WS-ReliableMessaging, обеспечивает поддержку надежных сеансов, в которых сообщения доставляются по порядку и точно один раз, обеспечивая уверенность даже при перемещении сообщений по нескольким узлам во время беседы. Дополнительные сведения см. в разделе "Надежные сеансы".
Предоставляет System.ServiceModel.NetMsmqBinding сеансы диаграммы данных MSMQ. Дополнительные сведения см. в разделе "Очереди" в WCF.
Помните, что установка SessionMode свойства не указывает тип сеанса, который требуется контракту, только то, что он требуется.