SessionMode Enum
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.
Anger de värden som är tillgängliga för att ange stöd för tillförlitliga sessioner som ett kontrakt kräver eller stöder.
public enum class SessionMode
public enum SessionMode
type SessionMode =
Public Enum SessionMode
- Arv
Fält
| Name | Värde | Description |
|---|---|---|
| Allowed | 0 | Anger att kontraktet stöder sessioner om den inkommande bindningen stöder dem. |
| Required | 1 | Anger att kontraktet kräver en sessionskänslig bindning. Ett undantag utlöses om bindningen inte har konfigurerats för att stödja sessionen. |
| NotAllowed | 2 | Anger att kontraktet aldrig stöder bindningar som initierar sessioner. |
Exempel
Följande kodexempel visar hur du använder SessionMode egenskapen ServiceContractAttribute för för att ange att tjänstkontraktet IMyService kräver bindningar som stöder sessionstillstånd.
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
SessionMode Använd uppräkningen med ServiceContractAttribute.SessionMode egenskapen för att kräva, tillåta eller förbjuda bindningar för att använda sessioner mellan slutpunkter som ansluter till eller stöder tjänstkontraktet. En session är ett sätt att korrelera en uppsättning meddelanden som utbyts mellan två eller flera slutpunkter. Mer information om sessioner finns i Använda sessioner.
Om tjänsten stöder sessioner kan du sedan använda ServiceBehaviorAttribute.InstanceContextMode egenskapen för att ange relationen mellan instanser av din tjänstkontraktsimplementering och kanalsessionen.
Om ServiceContractAttribute.SessionMode egenskapen till exempel är inställd på Allowed och ServiceBehaviorAttribute.InstanceContextMode egenskapen är inställd på InstanceContextMode.PerSessionkan en klient använda en bindning som stöder tillförlitliga sessioner för att göra upprepade anrop till samma tjänstobjekt.
Eftersom en session är ett begrepp på kanalnivå som programmodellen använder, finns det en interaktion mellan SessionMode uppräkningen i ett kontrakt och ServiceBehaviorAttribute.InstanceContextMode egenskapen, som styr associationen mellan kanaler och specifika tjänstobjekt.
Följande tabell visar resultatet av en inkommande kanal som antingen stöder tillförlitliga sessioner eller inte stöder tillförlitliga sessioner med tanke på en tjänsts kombination av värdena för ServiceContractAttribute.SessionMode egenskapen och ServiceBehaviorAttribute.InstanceContextMode egenskapen.
| InstanceContextMode-värde | Obligatoriskt | Tillåtet | Ej Tillåtet |
|---|---|---|---|
| Per Anrop | – Beteende med sessionsbunden kanal: En session och System.ServiceModel.InstanceContext för varje anrop. – Beteende med sessionslös kanal: Ett undantag utlöses. |
– Beteende med sessionsbunden kanal: En session och System.ServiceModel.InstanceContext för varje anrop. – Beteende med sessionslös kanal: En System.ServiceModel.InstanceContext för varje anrop. |
– Beteende med sessionskänslig kanal: Ett undantag utlöses. – Beteende med sessionslös kanal: En System.ServiceModel.InstanceContext för varje anrop. |
| PerSession | – Beteende med sessionskänslig kanal: En session och System.ServiceModel.InstanceContext för varje kanal. – Beteende med sessionslös kanal: Ett undantag utlöses. |
– Beteende med sessionskänslig kanal: En session och System.ServiceModel.InstanceContext för varje kanal. – Beteende med sessionslös kanal: En System.ServiceModel.InstanceContext för varje anrop. |
– Beteende med sessionskänslig kanal: Ett undantag utlöses. – Beteende med sessionslös kanal: En System.ServiceModel.InstanceContext för varje anrop. |
| Single | – Beteende med sessionskänslig kanal: En session och en System.ServiceModel.InstanceContext för alla anrop. – Beteende med sessionslös kanal: Ett undantag utlöses. |
– Beteende med sessionskänslig kanal: En session och System.ServiceModel.InstanceContext för varje skapad singleton eller för den användardefinierade singletonen. – Beteende med sessionslös kanal: En System.ServiceModel.InstanceContext för varje skapad singleton eller för den användardefinierade singletonen. |
– Beteende med sessionskänslig kanal: Ett undantag utlöses. – Beteende med sessionslös kanal: En System.ServiceModel.InstanceContext för varje skapad singleton eller för den användardefinierade singletonen. |