ServiceContractAttribute.SessionMode Egenskap
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
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.
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.
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å.
, 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.
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.