Auf Englisch lesen

Freigeben über


OperationContext Klasse

Definition

Bietet Zugriff auf den Ausführungskontext einer Dienstmethode.

C#
public sealed class OperationContext : System.ServiceModel.IExtensibleObject<System.ServiceModel.OperationContext>
Vererbung
OperationContext
Implementiert

Beispiele

Im folgenden Codebeispiel werden die Current -Eigenschaft und GetCallbackChannel -Methode verwendet, um den Kanal aus einer -Methode zurück an den Aufrufer abzurufen. Alle in diesem Beispiel verwendeten Methoden sind unidirektionale Methoden, die für den Dienst und den Client eine unabhängige Kommunikation in beide Richtungen ermöglichen. In diesem Fall erwartet die Beispielclientanwendung nur einen Rückgabeaufruf, bevor er beendet wird. Ein anderer Client, wie zum Beispiel ein Windows Forms-Client kann jedoch eine beliebige Anzahl Aufrufe von dem Dienst erhalten.

C#
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);
    }
  }
}

Der folgende Client implementiert den SampleDuplexHelloCallback , um die Rückrufnachricht zu empfangen. Der importierte Rückrufvertrag hat aufgrund der Verwendung der Eigenschaft im vorherigen Beispiel nicht den gleichen Namen wie der Name im Dienst. Beachten Sie, dass der Client keine Annahmen trifft, ob oder wann er einen Rückruf erhalten könnte. Der Serverrückruf ist völlig unabhängig vom ausgehenden Aufruf des Clients.

Hinweis

Ein Beispiel, das die OperationContext -Klasse in einem Clientszenario verwendet, finden Sie unter OperationContextScope.

C#
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();
    }
  }
}

Hinweise

Verwenden Sie die OperationContext von innerhalb eines Dienstvorgangs, um auf die aktuelle Ausführungsumgebung des Vorgangs zuzugreifen. Der Vorgangskontext wird insbesondere für den Zugriff auf Rückrufkanal in Duplexdiensten eingesetzt, um zusätzliche Statusdaten für verschiedene Vorgangsbereiche zu speichern und auf eingehende Nachrichtenheader und -eigenschaften zuzugreifen sowie um ausgehende Nachrichtenheader und -eigenschaften hinzuzufügen.

Weitere Informationen zur Verwendung von Erweiterungen zum Speichern von Zustandsdaten finden Sie unter Erweiterbare Objekte.

Verfügt OperationContext über die folgenden Eigenschaften und Methoden.

Konstruktoren

OperationContext(IContextChannel)

Initialisiert eine neue Instanz der OperationContext-Klasse, die den angegebenen IContextChannel in einer Clientanwendung verwendet.

Eigenschaften

Channel

Ruft den dem aktuellen OperationContext-Objekt zugeordneten Kanal ab.

ClaimsPrincipal

Ruft den anspruchsbasierten Prinzipal ab, der dem Vorgang zugeordnet ist.

Current

Ruft den Ausführungskontext für den aktuellen Thread ab oder legt ihn fest.

EndpointDispatcher

Ruft ab oder legt den Endpunktverteiler für den zu prüfenden oder zu ändernden Endpunkt fest.

Extensions

Ruft die Diensterweiterungsauflistung vom aktuellen Nachrichtenkontext ab.

HasSupportingTokens

Ruft einen Wert ab, der angibt, ob die eingehende Nachrichte über unterstützende Tokens verfügt.

Host

Ruft ServiceHost für das aktuelle Dienstobjekt ab.

IncomingMessageHeaders

Ruft die eingehenden Nachrichtenheader für den OperationContext ab.

IncomingMessageProperties

Ruft die Nachrichteneigenschaften für die eingehende Nachricht im OperationContext ab.

IncomingMessageVersion

Ruft die eingehende SOAP-Nachrichtenversion für den OperationContext ab.

InstanceContext

Ruft das InstanceContext-Objekt ab, das die aktuelle Dienstinstanz verwaltet.

IsUserContext

Diese Eigenschaft ist zur Verwendung durch das System bestimmt und sollte nicht von Benutzern aufgerufen werden.

OutgoingMessageHeaders

Ruft die ausgehenden Nachrichtenheader für den aktiven OperationContext ab.

OutgoingMessageProperties

Ruft die Nachrichteneigenschaften für die ausgehende Nachricht im aktiven OperationContext ab.

RequestContext

Ruft die RequestContext-Implementierung für diese Methode ab oder legt sie fest.

ServiceSecurityContext

Ruft den ServiceSecurityContext ab, in dem Methode ausgeführt wird, oder legt ihn fest.

SessionId

Ruft die String ab, die zur Identifizierung der aktuellen Sitzung verwendet wird.

SupportingTokens

Ruft eine ICollection<T> des Typs SecurityToken ab.

Methoden

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GetCallbackChannel<T>()

Ruft einen Kanal zur Clientinstanz ab, die den aktuellen Vorgang aufgerufen hat.

GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
SetTransactionComplete()

Führt einen Commit für die aktuell ausführende Transaktion aus.

ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Ereignisse

OperationCompleted

Tritt ein, wenn der Vorgang abgeschlossen wurde.

Gilt für:

Produkt Versionen
.NET Core 1.0, Core 1.1, 8 (package-provided), 9 (package-provided), 10 (package-provided)
.NET Framework 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0 (package-provided)
UWP 10.0