OperationContext Classe
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.
Permet d'accéder au contexte d'exécution d'une méthode de service.
public ref class OperationContext sealed : System::ServiceModel::IExtensibleObject<System::ServiceModel::OperationContext ^>
public sealed class OperationContext : System.ServiceModel.IExtensibleObject<System.ServiceModel.OperationContext>
type OperationContext = class
interface IExtensibleObject<OperationContext>
Public NotInheritable Class OperationContext
Implements IExtensibleObject(Of OperationContext)
- Héritage
-
OperationContext
- Implémente
Exemples
L’exemple de code suivant utilise la Current propriété et GetCallbackChannel la méthode pour obtenir le canal à l’appelant à partir d’une méthode. Toutes les méthodes de cet exemple sont des méthodes unidirectionnelles, permettant au service et au client de communiquer indépendamment dans les deux sens. Dans ce cas, l'application cliente d'exemple attend un seul appel de retour avant de quitter, mais un autre client, par exemple un client Windows Forms, peut recevoir n'importe quel nombre d'appels du service.
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);
}
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
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 = 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
Le client suivant implémente le SampleDuplexHelloCallback
pour recevoir le message de rappel. Le contrat de rappel importé n’a pas le même nom que celui du service, en raison de l’utilisation de la Name propriété dans l’exemple précédent. Notez que le client ne fait aucune hypothèse quant à la possibilité ou au moment où il peut recevoir un rappel ; le rappel de serveur est entièrement indépendant de l'appel sortant du client.
Notes
Pour obtenir un exemple qui utilise la OperationContext classe dans un scénario client, consultez OperationContextScope.
using System;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.Threading;
namespace Microsoft.WCF.Documentation
{
public class Client : SampleDuplexHelloCallback
{
AutoResetEvent waitHandle;
public Client()
{
waitHandle = new AutoResetEvent(false);
}
public void Run()
{
// Picks up configuration from the config file.
SampleDuplexHelloClient wcfClient
= new SampleDuplexHelloClient(new InstanceContext(this));
try
{
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("Enter a greeting to send and press ENTER: ");
Console.Write(">>> ");
Console.ForegroundColor = ConsoleColor.Green;
string greeting = Console.ReadLine();
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("Called service with: \r\n\t" + greeting);
wcfClient.Hello(greeting);
Console.WriteLine("Execution passes service call and moves to the WaitHandle.");
this.waitHandle.WaitOne();
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine("Set was called.");
Console.Write("Press ");
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("ENTER");
Console.ForegroundColor = ConsoleColor.Blue;
Console.Write(" to exit...");
Console.ReadLine();
wcfClient.Close();
}
catch (TimeoutException timeProblem)
{
Console.WriteLine("The service operation timed out. " + timeProblem.Message);
Console.ReadLine();
wcfClient.Abort();
}
catch (CommunicationException commProblem)
{
Console.WriteLine("There was a communication problem. " + commProblem.Message);
Console.ReadLine();
wcfClient.Abort();
}
}
public static void Main()
{
Client client = new Client();
client.Run();
}
public void Reply(string response)
{
Console.WriteLine("Received output.");
Console.WriteLine("\r\n\t" + response);
this.waitHandle.Set();
}
}
}
Imports System.ServiceModel
Imports System.ServiceModel.Channels
Imports System.Threading
Namespace Microsoft.WCF.Documentation
Public Class Client
Implements SampleDuplexHelloCallback
Private waitHandle As AutoResetEvent
Public Sub New()
waitHandle = New AutoResetEvent(False)
End Sub
Public Sub Run()
' Picks up configuration from the config file.
Dim wcfClient As New SampleDuplexHelloClient(New InstanceContext(Me))
Try
Console.ForegroundColor = ConsoleColor.White
Console.WriteLine("Enter a greeting to send and press ENTER: ")
Console.Write(">>> ")
Console.ForegroundColor = ConsoleColor.Green
Dim greeting = Console.ReadLine()
Console.ForegroundColor = ConsoleColor.White
Console.WriteLine("Called service with: " & Constants.vbCrLf & Constants.vbTab & greeting)
wcfClient.Hello(greeting)
Console.WriteLine("Execution passes service call and moves to the WaitHandle.")
Me.waitHandle.WaitOne()
Console.ForegroundColor = ConsoleColor.Blue
Console.WriteLine("Set was called.")
Console.Write("Press ")
Console.ForegroundColor = ConsoleColor.Red
Console.Write("ENTER")
Console.ForegroundColor = ConsoleColor.Blue
Console.Write(" to exit...")
Console.ReadLine()
wcfClient.Close()
Catch timeProblem As TimeoutException
Console.WriteLine("The service operation timed out. " & timeProblem.Message)
Console.ReadLine()
wcfClient.Abort()
Catch commProblem As CommunicationException
Console.WriteLine("There was a communication problem. " & commProblem.Message)
Console.ReadLine()
wcfClient.Abort()
End Try
End Sub
Public Shared Sub Main()
Dim client As New Client()
client.Run()
End Sub
Public Sub Reply(ByVal response As String) Implements SampleDuplexHelloCallback.Reply
Console.WriteLine("Received output.")
Console.WriteLine(Constants.vbCrLf & Constants.vbTab & response)
Me.waitHandle.Set()
End Sub
End Class
End Namespace
Remarques
Utilisez le OperationContext à partir d’une opération de service pour accéder à l’environnement d’exécution d’opération actuel. En particulier, le contexte d'opération est utilisé pour accéder aux canaux de rappel dans les services duplex, pour stocker les données d'état supplémentaires dans l'ensemble des parties des opérations et pour accéder aux en-têtes et aux propriétés de message entrant ainsi que pour ajouter des en-têtes et des propriétés de message sortant.
Pour plus d’informations sur l’utilisation d’extensions pour stocker des données d’état, consultez Objets extensibles.
a OperationContext les propriétés et méthodes suivantes.
La Current propriété retourne l’objet OperationContext représentant le contexte d’exécution actuel.
La ServiceSecurityContext propriété retourne l’environnement de sécurité sous lequel la méthode s’exécute.
La EndpointDispatcher propriété obtient le .System.ServiceModel.Dispatcher.EndpointDispatcher
La Extensions propriété retourne une collection d’extensions pour le actuel OperationContext.
La Host propriété retourne l’objet ServiceHostBase qui gère le service.
La HasSupportingTokens propriété retourne une valeur qui indique si la méthode a des jetons de prise en charge. Si c’est le cas, la SupportingTokens propriété les obtient.
Les IncomingMessageHeaderspropriétés , IncomingMessagePropertieset IncomingMessageVersion obtiennent ces éléments à partir du message entrant.
L’événement OperationCompleted est déclenché une fois l’opération terminée.
Les OutgoingMessageHeaders propriétés et OutgoingMessageProperties obtiennent ces éléments pour le message sortant.
La RequestContext propriété retourne l’implémentation RequestContext de la méthode .
La InstanceContext propriété retourne le InstanceContext associé à l’opération.
La SessionId propriété retourne l’identificateur de session pour le canal et l’objet actuels.
La GetCallbackChannel méthode retourne un canal de rappel à l’appelant dans le cas d’une communication duplex.
La SetTransactionComplete méthode valide la transaction actuelle.
Constructeurs
OperationContext(IContextChannel) |
Initialise une nouvelle instance de la classe OperationContext qui utilise le IContextChannel spécifié dans une application cliente. |
Propriétés
Channel |
Obtient le canal associé à l'objet OperationContext en cours. |
ClaimsPrincipal |
Obtient l'entité basée sur les revendications associée à l'opération. |
Current |
Obtient ou définit le contexte d'exécution du thread actuel. |
EndpointDispatcher |
Obtient ou définit le répartiteur de points de terminaison pour le point de terminaison à inspecter ou modifier. |
Extensions |
Obtient la collection d'extensions de service du contexte de message actuel. |
HasSupportingTokens |
Obtient une valeur qui indique si le message entrant a des jetons de prise en charge. |
Host |
Obtient l'ServiceHost pour l'objet de service en cours. |
IncomingMessageHeaders |
Obtient les en-têtes de message entrant pour le OperationContext. |
IncomingMessageProperties |
Obtient les propriétés de message pour le message entrant dans le OperationContext. |
IncomingMessageVersion |
Obtient la version du message SOAP entrant pour le OperationContext. |
InstanceContext |
Obtient l'objet InstanceContext qui gère l'instance de service en cours. |
IsUserContext |
Cette propriété est réservée au système et ne doit pas être appelée par les utilisateurs. |
OutgoingMessageHeaders |
Obtient les en-têtes de message sortant pour le OperationContext actif. |
OutgoingMessageProperties |
Obtient les propriétés de message pour le message sortant dans le OperationContext actif. |
RequestContext |
Obtient ou définit l'implémentation RequestContext pour cette méthode. |
ServiceSecurityContext |
Obtient ou définit le ServiceSecurityContext dans lequel s'exécute cette méthode. |
SessionId |
Obtient la String utilisée pour identifier la session active. |
SupportingTokens |
Obtient un ICollection<T> de type SecurityToken. |
Méthodes
Equals(Object) |
Détermine si l'objet spécifié est égal à l'objet actuel. (Hérité de Object) |
GetCallbackChannel<T>() |
Obtient un canal à l'instance du client qui a appelé l'opération en cours. |
GetHashCode() |
Fait office de fonction de hachage par défaut. (Hérité de Object) |
GetType() |
Obtient le Type de l'instance actuelle. (Hérité de Object) |
MemberwiseClone() |
Crée une copie superficielle du Object actuel. (Hérité de Object) |
SetTransactionComplete() |
Valide la transaction en cours d'exécution. |
ToString() |
Retourne une chaîne qui représente l'objet actuel. (Hérité de Object) |
Événements
OperationCompleted |
Se produit lorsque l'opération est terminée. |