OperationContext Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Bietet Zugriff auf den Ausführungskontext einer Dienstmethode.
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)
- Vererbung
-
OperationContext
- Implementiert
Beispiele
Im folgenden Codebeispiel wird die Current Eigenschaft und GetCallbackChannel Methode verwendet, um den Kanal zurück zum Aufrufer innerhalb einer Methode abzurufen. Alle Methoden in diesem Beispiel sind unidirektionale Methoden, wodurch der Dienst und der Client unabhängig voneinander kommunizieren können. In diesem Fall erwartet die Beispielclientanwendung nur einen Rückgabeaufruf, bevor er beendet wird, aber ein anderer Client, z. B. ein Windows Forms-Client, kann eine beliebige Anzahl von Anrufen vom Dienst empfangen.
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
Der folgende Client implementiert den SampleDuplexHelloCallback Empfang der Rückrufnachricht. Der importierte Rückrufvertrag ist aufgrund der Verwendung der Name Eigenschaft im vorherigen Beispiel nicht derselbe Name wie der im Dienst enthaltene. Beachten Sie, dass der Client keine Annahmen darüber vorgibt, ob oder wann er einen Rückruf erhält; Der Serverrückruf ist vollständig unabhängig vom ausgehenden Anruf des Clients.
Hinweis
Ein Beispiel, das die OperationContext Klasse in einem Clientszenario verwendet, finden Sie unter 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
Hinweise
Verwenden Sie die OperationContext Daten aus einem Dienstvorgang, um auf die aktuelle Ausführungsumgebung des Vorgangs zuzugreifen. Insbesondere wird der Vorgangskontext verwendet, um auf Rückrufkanäle in Duplexdiensten zuzugreifen, zusätzliche Zustandsdaten in Teilen der Vorgänge zu speichern und auf eingehende Nachrichtenkopfzeilen und -eigenschaften zuzugreifen sowie Ausgehende Nachrichtenkopfzeilen und -eigenschaften hinzuzufügen.
Weitere Informationen zum Verwenden von Erweiterungen zum Speichern von Statusdaten finden Sie unter Extensible Objects.
Die OperationContext folgenden Eigenschaften und Methoden sind verfügbar.
Die Current Eigenschaft gibt das OperationContext Objekt zurück, das den aktuellen Ausführungskontext darstellt.
Die ServiceSecurityContext Eigenschaft gibt die Sicherheitsumgebung zurück, unter der die Methode ausgeführt wird.
Die EndpointDispatcher Eigenschaft ruft die Operation ab System.ServiceModel.Dispatcher.EndpointDispatcher.
Die Extensions Eigenschaft gibt eine Erweiterungsauflistung für die aktuelle zurück OperationContext.
Die Host Eigenschaft gibt das ServiceHostBase Objekt zurück, das den Dienst verwaltet.
Die HasSupportingTokens Eigenschaft gibt einen Wert zurück, der angibt, ob die Methode unterstützende Token enthält, wenn dies der Grund ist, die SupportingTokens Eigenschaft diese abruft.
Die IncomingMessageHeaders, IncomingMessagePropertiesund IncomingMessageVersion die Eigenschaften rufen diese Elemente aus der eingehenden Nachricht ab.
Das OperationCompleted Ereignis wird ausgelöst, wenn der Vorgang abgeschlossen ist.
Diese OutgoingMessageHeaders Elemente werden OutgoingMessageProperties von den Eigenschaften für die ausgehende Nachricht abgerufen.
Die RequestContext Eigenschaft gibt die RequestContext Implementierung für die Methode zurück.
Die InstanceContext Eigenschaft gibt die InstanceContext dem Vorgang zugeordnete Eigenschaft zurück.
Die SessionId Eigenschaft gibt den Sitzungsbezeichner für den aktuellen Kanal und das aktuelle Objekt zurück.
Die GetCallbackChannel Methode gibt einen Rückrufkanal an den Aufrufer im Falle der Duplexkommunikation zurück.
Die SetTransactionComplete Methode führt einen Commit für die aktuelle Transaktion durch.
Konstruktoren
| Name | Beschreibung |
|---|---|
| OperationContext(IContextChannel) |
Initialisiert eine neue Instanz der OperationContext Klasse, die die in einer Clientanwendung angegebene IContextChannel verwendet. |
Eigenschaften
| Name | Beschreibung |
|---|---|
| Channel |
Ruft den Kanal ab, der dem aktuellen OperationContext Objekt zugeordnet ist. |
| ClaimsPrincipal |
Ruft den anspruchsbasierten Prinzipal ab, der dem Vorgang zugeordnet ist. |
| Current |
Dient zum Abrufen oder Festlegen des Ausführungskontexts für den aktuellen Thread. |
| EndpointDispatcher |
Dient zum Abrufen oder Festlegen des Endpunkt-Verteilers für den Endpunkt, der überprüft oder geändert werden soll. |
| Extensions |
Ruft die Sammlung von Diensterweiterungen aus dem aktuellen Nachrichtenkontext ab. |
| HasSupportingTokens |
Ruft einen Wert ab, der angibt, ob die eingehende Nachricht unterstützende Token enthält. |
| Host |
Ruft das ServiceHost aktuelle Dienstobjekt ab. |
| IncomingMessageHeaders |
Ruft die Kopfzeilen für eingehende Nachrichten für die OperationContext. |
| IncomingMessageProperties |
Ruft die Nachrichteneigenschaften für die eingehende Nachricht in der OperationContext. |
| IncomingMessageVersion |
Ruft die eingehende SOAP-Nachrichtenversion für die OperationContext. |
| InstanceContext |
Ruft das InstanceContext Objekt ab, das die aktuelle Dienstinstanz verwaltet. |
| IsUserContext |
Diese Eigenschaft ist für die Systemverwendung vorgesehen und sollte nicht von Benutzern aufgerufen werden. |
| OutgoingMessageHeaders |
Ruft die Kopfzeilen für ausgehende Nachrichten für das aktive OperationContext. |
| OutgoingMessageProperties |
Ruft die Nachrichteneigenschaften für die ausgehende Nachricht in der aktiven OperationContextab. |
| RequestContext |
Ruft die RequestContext Implementierung für diese Methode ab oder legt sie fest. |
| ServiceSecurityContext |
Dient zum Abrufen oder Festlegen des ServiceSecurityContext Werts, in dem diese Methode ausgeführt wird. |
| SessionId |
Ruft die String verwendet, um die aktuelle Sitzung zu identifizieren. |
| SupportingTokens |
Ruft einen ICollection<T> Typ ab SecurityToken. |
Methoden
| Name | Beschreibung |
|---|---|
| Equals(Object) |
Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht. (Geerbt von Object) |
| GetCallbackChannel<T>() |
Ruft einen Kanal zur Clientinstanz ab, die den aktuellen Vorgang aufgerufen hat. |
| GetHashCode() |
Dient als Standardhashfunktion. (Geerbt von Object) |
| GetType() |
Ruft die Type der aktuellen Instanz ab. (Geerbt von Object) |
| MemberwiseClone() |
Erstellt eine flache Kopie der aktuellen Object. (Geerbt von Object) |
| SetTransactionComplete() |
Führt einen Commit für die aktuell ausgeführte Transaktion durch. |
| ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |
Ereignisse
| Name | Beschreibung |
|---|---|
| OperationCompleted |
Tritt auf, wenn der Vorgang abgeschlossen ist. |