SessionMode Enumeração
Definição
Especifica os valores disponíveis para indicar o suporte às sessões confiáveis que um contrato requer ou dá suporte.Specifies the values available to indicate the support for reliable sessions that a contract requires or supports.
public enum class SessionMode
public enum SessionMode
type SessionMode =
Public Enum SessionMode
- Herança
Campos
| Allowed | 0 | Especifica que o contrato dá suporte a sessões, se a associação de entrada der suporte a elas.Specifies that the contract supports sessions if the incoming binding supports them. |
| NotAllowed | 2 | Especifica que o contrato nunca dá suporte a associações que iniciam sessões.Specifies that the contract never supports bindings that initiate sessions. |
| Required | 1 | Especifica que o contrato exige uma associação de sessão.Specifies that the contract requires a sessionful binding. Uma exceção será lançada se a associação não estiver configurada para dar suporte à sessão.An exception is thrown if the binding is not configured to support session. |
Exemplos
O exemplo de código a seguir mostra como usar a SessionMode propriedade de ServiceContractAttribute para especificar que o IMyService contrato de serviço requer associações que dão suporte ao estado da sessão.The following code example shows how to use the SessionMode property of the ServiceContractAttribute to specify that the IMyService service contract requires bindings that support session state.
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
Comentários
Use a SessionMode enumeração com a ServiceContractAttribute.SessionMode propriedade para exigir, permitir ou proibir associações para usar sessões entre pontos de extremidade que se conectam ou suportam o contrato de serviço.Use the SessionMode enumeration with the ServiceContractAttribute.SessionMode property to require, allow, or prohibit bindings to use sessions between endpoints that connect to or support the service contract. Uma sessão é uma maneira de correlacionar um conjunto de mensagens trocadas entre dois ou mais pontos de extremidade.A session is a way of correlating a set of messages exchanged between two or more endpoints. Para obter mais informações sobre sessões, consulte usando sessões.For more information about sessions, see Using Sessions.
Se o seu serviço oferecer suporte a sessões, você poderá usar a ServiceBehaviorAttribute.InstanceContextMode propriedade para especificar a relação entre as instâncias da implementação do contrato de serviço e a sessão do canal.If your service supports sessions, you can then use the ServiceBehaviorAttribute.InstanceContextMode property to specify the relationship between instances of your service contract implementation and the channel session.
Por exemplo, se a ServiceContractAttribute.SessionMode propriedade for definida como Allowed e a ServiceBehaviorAttribute.InstanceContextMode propriedade for definida como InstanceContextMode.PerSession , um cliente poderá usar uma associação que dá suporte a sessões confiáveis para fazer chamadas repetidas para o mesmo objeto de serviço.For example, if the ServiceContractAttribute.SessionMode property is set to Allowed and the ServiceBehaviorAttribute.InstanceContextMode property is set to InstanceContextMode.PerSession, a client can use a binding that supports reliable sessions to make repeated calls to the same service object.
Como uma sessão é um conceito de nível de canal que o modelo de aplicativo usa, há uma interação entre a SessionMode enumeração em um contrato e a ServiceBehaviorAttribute.InstanceContextMode propriedade, que controla a associação entre canais e objetos de serviço específicos.Because a session is a channel-level concept that the application model uses, there is an interaction between the SessionMode enumeration in a contract and the ServiceBehaviorAttribute.InstanceContextMode property, which controls the association between channels and specific service objects.
A tabela a seguir mostra o resultado de um canal de entrada que dá suporte a sessões confiáveis ou não suporte a sessões confiáveis, dadas a combinação de valores da propriedade e da propriedade por um serviço ServiceContractAttribute.SessionMode ServiceBehaviorAttribute.InstanceContextMode .The following table shows the result of an incoming channel either supporting reliable sessions or not supporting reliable sessions given a service's combination of the values of the ServiceContractAttribute.SessionMode property and the ServiceBehaviorAttribute.InstanceContextMode property.
| Valor de InstanceContextmodeInstanceContextMode Value | ObrigatórioRequired | PermitidoAllowed | NotAllowedNotAllowed |
|---|---|---|---|
| PerCallPerCall | -Comportamento com o canal de sessão: uma sessão e System.ServiceModel.InstanceContext para cada chamada.- Behavior with sessionful channel: A session and System.ServiceModel.InstanceContext for each call. -Comportamento com canal sem sessão: uma exceção é lançada.- Behavior with sessionless channel: An exception is thrown. |
-Comportamento com o canal de sessão: uma sessão e System.ServiceModel.InstanceContext para cada chamada.- Behavior with sessionful channel: A session and System.ServiceModel.InstanceContext for each call. -Comportamento com canal sem sessão: um System.ServiceModel.InstanceContext para cada chamada.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each call. |
-Comportamento com o canal de sessão: uma exceção é lançada.- Behavior with sessionful channel: An exception is thrown. -Comportamento com canal sem sessão: um System.ServiceModel.InstanceContext para cada chamada.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each call. |
| PerSessionPerSession | -Comportamento com o canal de sessão: uma sessão e System.ServiceModel.InstanceContext para cada canal.- Behavior with sessionful channel: A session and System.ServiceModel.InstanceContext for each channel. -Comportamento com canal sem sessão: uma exceção é lançada.- Behavior with sessionless channel: An exception is thrown. |
-Comportamento com o canal de sessão: uma sessão e System.ServiceModel.InstanceContext para cada canal.- Behavior with sessionful channel: A session and System.ServiceModel.InstanceContext for each channel. -Comportamento com canal sem sessão: um System.ServiceModel.InstanceContext para cada chamada.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each call. |
-Comportamento com o canal de sessão: uma exceção é lançada.- Behavior with sessionful channel: An exception is thrown. -Comportamento com canal sem sessão: um System.ServiceModel.InstanceContext para cada chamada.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each call. |
| SingleSingle | -Comportamento com o canal de sessão: uma sessão e outra System.ServiceModel.InstanceContext para todas as chamadas.- Behavior with sessionful channel: One session and one System.ServiceModel.InstanceContext for all calls. -Comportamento com canal sem sessão: uma exceção é lançada.- Behavior with sessionless channel: An exception is thrown. |
-Comportamento com o canal de sessão: uma sessão e System.ServiceModel.InstanceContext para cada singleton criado ou para o singleton especificado pelo usuário.- Behavior with sessionful channel: A session and System.ServiceModel.InstanceContext for each created singleton or for the user-specified singleton. -Comportamento com canal sem sessão: um System.ServiceModel.InstanceContext para cada singleton criado ou para o singleton especificado pelo usuário.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each created singleton or for the user-specified singleton. |
-Comportamento com o canal de sessão: uma exceção é lançada.- Behavior with sessionful channel: An exception is thrown. -Comportamento com canal sem sessão: um System.ServiceModel.InstanceContext para cada singleton criado ou para o singleton especificado pelo usuário.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each created singleton or for the user-specified singleton. |