SessionMode Énumération
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Spécifie les valeurs disponibles pour indiquer la prise en charge des sessions fiables qu'un contrat requiert ou prend en charge.
public enum class SessionMode
public enum SessionMode
type SessionMode =
Public Enum SessionMode
- Héritage
Champs
Allowed | 0 | Spécifie que le contrat prend en charge les sessions si la liaison entrante les prend en charge. |
NotAllowed | 2 | Spécifie que le contrat ne prend jamais en charge des liaisons qui initient des sessions. |
Required | 1 | Spécifie que le contrat requiert une liaison de session. Une exception est levée si la liaison n'est pas configurée pour prendre en charge la session. |
Exemples
L’exemple de code suivant montre comment utiliser la SessionMode propriété du contrat de service pour spécifier que le IMyService
contrat de service nécessite des liaisons qui prennent en charge l’état de ServiceContractAttribute session.
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
Remarques
Utilisez l’énumération SessionMode avec la ServiceContractAttribute.SessionMode propriété pour exiger, autoriser ou interdire les liaisons pour utiliser des sessions entre des points de terminaison qui se connectent au contrat de service ou qui prennent en charge le contrat de service. Une session est une façon de faire correspondre un ensemble de messages échangés entre deux points de terminaison ou plus. Pour plus d’informations sur les sessions, consultez Utilisation de sessions.
Si votre service prend en charge les sessions, vous pouvez ensuite utiliser la ServiceBehaviorAttribute.InstanceContextMode propriété pour spécifier la relation entre les instances de votre implémentation de contrat de service et la session de canal.
Par exemple, si la ServiceContractAttribute.SessionMode propriété est définie Allowed
et que la ServiceBehaviorAttribute.InstanceContextMode propriété est définie InstanceContextMode.PerSessionsur , un client peut utiliser une liaison qui prend en charge les sessions fiables pour effectuer des appels répétés au même objet de service.
Étant donné qu’une session est un concept de niveau canal utilisé par le modèle d’application, il existe une interaction entre l’énumération SessionMode dans un contrat et la ServiceBehaviorAttribute.InstanceContextMode propriété, qui contrôle l’association entre les canaux et des objets de service spécifiques.
Le tableau suivant montre le résultat d’un canal entrant prenant en charge les sessions fiables ou ne prenant pas en charge les sessions fiables en fonction de la combinaison d’un service des valeurs de la ServiceContractAttribute.SessionMode propriété et de la ServiceBehaviorAttribute.InstanceContextMode propriété.
Valeur InstanceContextMode | Obligatoire | Autorisé | Non autorisé |
---|---|---|---|
PerCall | - Comportement avec un canal avec session : session et System.ServiceModel.InstanceContext pour chaque appel. - Comportement avec un canal sans session : une exception est levée. |
- Comportement avec un canal avec session : session et System.ServiceModel.InstanceContext pour chaque appel. - Comportement avec un canal sans session : pour System.ServiceModel.InstanceContext chaque appel. |
- Comportement avec canal avec session : une exception est levée. - Comportement avec un canal sans session : pour System.ServiceModel.InstanceContext chaque appel. |
PerSession | - Comportement avec un canal avec session : session et System.ServiceModel.InstanceContext pour chaque canal. - Comportement avec un canal sans session : une exception est levée. |
- Comportement avec un canal avec session : session et System.ServiceModel.InstanceContext pour chaque canal. - Comportement avec un canal sans session : pour System.ServiceModel.InstanceContext chaque appel. |
- Comportement avec canal avec session : une exception est levée. - Comportement avec un canal sans session : pour System.ServiceModel.InstanceContext chaque appel. |
Unique | - Comportement avec canal avec session : une session et une System.ServiceModel.InstanceContext pour tous les appels. - Comportement avec un canal sans session : une exception est levée. |
- Comportement avec un canal avec session : session et System.ServiceModel.InstanceContext pour chaque singleton créé ou pour le singleton spécifié par l’utilisateur. - Comportement avec un canal sans session : System.ServiceModel.InstanceContext pour chaque singleton créé ou pour le singleton spécifié par l’utilisateur. |
- Comportement avec canal avec session : une exception est levée. - Comportement avec un canal sans session : System.ServiceModel.InstanceContext pour chaque singleton créé ou pour le singleton spécifié par l’utilisateur. |