OperationContext Klas
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Biedt toegang tot de uitvoeringscontext van een servicemethode.
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)
- Overname
-
OperationContext
- Implementeringen
Voorbeelden
In het volgende codevoorbeeld wordt de Current eigenschap en GetCallbackChannel methode gebruikt om het kanaal terug te krijgen naar de aanroeper vanuit een methode. Alle methoden in dit voorbeeld zijn methoden in één richting, waardoor de service en de client onafhankelijk van elkaar kunnen communiceren. In dit geval verwacht de voorbeeldclienttoepassing slechts één retouroproep voordat deze wordt afgesloten, maar een andere client, bijvoorbeeld een Windows Forms client, kan een willekeurig aantal oproepen van de service ontvangen.
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
De volgende client implementeert het SampleDuplexHelloCallback om het callback-bericht te ontvangen. Het geïmporteerde callback-contract is niet dezelfde naam als het contract in de service, vanwege het gebruik van de Name eigenschap in het vorige voorbeeld. Houd er rekening mee dat de client geen aannames doet over of of of het een callback kan ontvangen; de server callback is volledig onafhankelijk van de uitgaande aanroep van de client.
Note
Zie voor een voorbeeld dat gebruikmaakt van de OperationContext klasse in een clientscenario 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
Opmerkingen
Gebruik de OperationContext bewerking vanuit een service om toegang te krijgen tot de huidige uitvoeringsomgeving voor bewerkingen. In het bijzonder wordt de bewerkingscontext gebruikt voor toegang tot callbackkanalen in duplexservices, om extra statusgegevens op te slaan over gedeelten van de bewerkingen, en om toegang te krijgen tot binnenkomende berichtkoppen en eigenschappen, en om uitgaande berichtkoppen en eigenschappen toe te voegen.
Zie Extensible Objects voor meer informatie over het gebruik van extensies voor het opslaan van statusgegevens.
De OperationContext eigenschap heeft de volgende eigenschappen en methoden.
De Current eigenschap retourneert het OperationContext object dat de huidige uitvoeringscontext vertegenwoordigt.
De ServiceSecurityContext eigenschap retourneert de beveiligingsomgeving waaronder de methode wordt uitgevoerd.
De EndpointDispatcher eigenschap haalt de bewerking op System.ServiceModel.Dispatcher.EndpointDispatcher.
De Extensions eigenschap retourneert een extensieverzameling voor de huidige OperationContext.
De Host eigenschap retourneert het ServiceHostBase object dat de service beheert.
De HasSupportingTokens eigenschap retourneert een waarde die aangeeft of de methode ondersteunende tokens heeft, als dat het zo is, de SupportingTokens eigenschap krijgt deze.
Met de IncomingMessageHeaderseigenschappen en IncomingMessagePropertiesde IncomingMessageVersion eigenschappen worden deze items opgehaald uit het binnenkomende bericht.
De OperationCompleted gebeurtenis wordt geactiveerd wanneer de bewerking is voltooid.
De OutgoingMessageHeaders en OutgoingMessageProperties eigenschappen krijgen deze items voor het uitgaande bericht.
De RequestContext eigenschap retourneert de RequestContext implementatie voor de methode.
De InstanceContext eigenschap retourneert de InstanceContext gekoppelde bewerking.
De SessionId eigenschap retourneert de sessie-id voor het huidige kanaal en object.
De GetCallbackChannel methode retourneert een callback-kanaal naar de aanroeper in het geval van dubbelzijdige communicatie.
Met SetTransactionComplete de methode wordt de huidige transactie doorgevoerd.
Constructors
| Name | Description |
|---|---|
| OperationContext(IContextChannel) |
Initialiseert een nieuw exemplaar van de OperationContext klasse die gebruikmaakt van de opgegeven IContextChannel in een clienttoepassing. |
Eigenschappen
| Name | Description |
|---|---|
| Channel |
Hiermee haalt u het kanaal op dat is gekoppeld aan het huidige OperationContext object. |
| ClaimsPrincipal |
Hiermee haalt u de op claims gebaseerde principal op die aan de bewerking is gekoppeld. |
| Current |
Hiermee haalt u de uitvoeringscontext voor de huidige thread op of stelt u deze in. |
| EndpointDispatcher |
Hiermee wordt de eindpunt-dispatcher voor het eindpunt ophaalt of ingesteld om het te inspecteren of te wijzigen. |
| Extensions |
Hiermee haalt u de verzameling service-extensies op uit de huidige berichtcontext. |
| HasSupportingTokens |
Hiermee wordt een waarde opgehaald die aangeeft of het binnenkomende bericht ondersteuningstokens heeft. |
| Host |
Hiermee haalt u het ServiceHost voor het huidige serviceobject op. |
| IncomingMessageHeaders |
Hiermee haalt u de binnenkomende berichtkoppen voor de OperationContext. |
| IncomingMessageProperties |
Hiermee haalt u de berichteigenschappen op voor het binnenkomende bericht in de OperationContext. |
| IncomingMessageVersion |
Hiermee wordt de binnenkomende SOAP-berichtversie voor de OperationContext. |
| InstanceContext |
Hiermee haalt u het InstanceContext object op dat het huidige service-exemplaar beheert. |
| IsUserContext |
Deze eigenschap is bedoeld voor systeemgebruik en mag niet door gebruikers worden aangeroepen. |
| OutgoingMessageHeaders |
Hiermee haalt u de uitgaande berichtkoppen voor de actieve OperationContext. |
| OutgoingMessageProperties |
Hiermee worden de berichteigenschappen voor het uitgaande bericht in het actieve bericht opgeslagen OperationContext. |
| RequestContext |
Hiermee haalt u de RequestContext implementatie voor deze methode op of stelt u deze in. |
| ServiceSecurityContext |
Hiermee haalt u de ServiceSecurityContext uitvoering van deze methode op of stelt u deze in. |
| SessionId |
Hiermee haalt u de String gebruikte op om de huidige sessie te identificeren. |
| SupportingTokens |
Hiermee haalt u een ICollection<T> type SecurityTokenop. |
Methoden
| Name | Description |
|---|---|
| Equals(Object) |
Bepaalt of het opgegeven object gelijk is aan het huidige object. (Overgenomen van Object) |
| GetCallbackChannel<T>() |
Hiermee haalt u een kanaal op naar het clientexemplaren dat de huidige bewerking heeft aangeroepen. |
| GetHashCode() |
Fungeert als de standaardhashfunctie. (Overgenomen van Object) |
| GetType() |
Hiermee haalt u de Type huidige instantie op. (Overgenomen van Object) |
| MemberwiseClone() |
Hiermee maakt u een ondiepe kopie van de huidige Object. (Overgenomen van Object) |
| SetTransactionComplete() |
Voert de momenteel uitgevoerde transactie door. |
| ToString() |
Retourneert een tekenreeks die het huidige object vertegenwoordigt. (Overgenomen van Object) |
gebeurtenis
| Name | Description |
|---|---|
| OperationCompleted |
Treedt op wanneer de bewerking is voltooid. |