OperationContext Klasa

Definicja

Zapewnia dostęp do kontekstu wykonywania metody usługi.

C#
public sealed class OperationContext : System.ServiceModel.IExtensibleObject<System.ServiceModel.OperationContext>
Dziedziczenie
OperationContext
Implementuje

Przykłady

Poniższy przykład kodu używa Current właściwości i GetCallbackChannel metody w celu uzyskania kanału z powrotem do obiektu wywołującego z poziomu metody. Wszystkie metody w tym przykładzie to metody jednokierunkowe, umożliwiając usłudze i klientowi niezależne komunikowanie się w obu kierunkach. W takim przypadku przykładowa aplikacja kliencka oczekuje tylko jednego wywołania zwrotnego przed jego zamknięciem, ale inny klient, na przykład klient Windows Forms, może odbierać dowolną liczbę wywołań z usługi.

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

Następujący klient implementuje element SampleDuplexHelloCallback w celu odebrania komunikatu wywołania zwrotnego. Importowany kontrakt wywołania zwrotnego nie jest taką samą nazwą jak ten w usłudze, ze względu na użycie Name właściwości w poprzednim przykładzie. Należy pamiętać, że klient nie przyjmuje żadnych założeń dotyczących tego, czy lub kiedy może otrzymać wywołanie zwrotne; wywołanie zwrotne serwera jest całkowicie niezależne od wywołania wychodzącego klienta.

Uwaga

Przykład użycia klasy w scenariuszu OperationContext klienta można znaleźć w temacie 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();
    }
  }
}

Uwagi

OperationContext Użyj polecenia z poziomu operacji usługi, aby uzyskać dostęp do bieżącego środowiska wykonywania operacji. W szczególności kontekst operacji służy do uzyskiwania dostępu do kanałów wywołania zwrotnego w usługach dwukierunkowych, przechowywania dodatkowych danych stanu w częściach operacji oraz uzyskiwania dostępu do przychodzących nagłówków i właściwości komunikatów, a także dodawania nagłówków i właściwości wychodzących komunikatów.

Aby uzyskać więcej informacji na temat używania rozszerzeń do przechowywania danych stanu, zobacz Extensible Objects (Rozszerzalne obiekty).

Element OperationContext ma następujące właściwości i metody.

Konstruktory

OperationContext(IContextChannel)

Inicjuje OperationContext nowe wystąpienie klasy, która używa klasy określonej IContextChannel w aplikacji klienckiej.

Właściwości

Channel

Pobiera kanał skojarzony z bieżącym OperationContext obiektem.

ClaimsPrincipal

Pobiera podmiot zabezpieczeń oparty na oświadczeniach skojarzony z operacją.

Current

Pobiera lub ustawia kontekst wykonywania dla bieżącego wątku.

EndpointDispatcher

Pobiera lub ustawia dyspozytor punktu końcowego dla punktu końcowego w celu sprawdzenia lub zmodyfikowania.

Extensions

Pobiera kolekcję rozszerzeń usługi z bieżącego kontekstu komunikatu.

HasSupportingTokens

Pobiera wartość wskazującą, czy komunikat przychodzący ma tokeny pomocnicze.

Host

Pobiera element ServiceHost dla bieżącego obiektu usługi.

IncomingMessageHeaders

Pobiera nagłówki komunikatów przychodzących dla .OperationContext

IncomingMessageProperties

Pobiera właściwości komunikatu dla komunikatu przychodzącego w obiekcie OperationContext.

IncomingMessageVersion

Pobiera przychodzącą wersję komunikatu PROTOKOŁU SOAP dla programu OperationContext.

InstanceContext

InstanceContext Pobiera obiekt, który zarządza bieżącym wystąpieniem usługi.

IsUserContext

Ta właściwość jest przeznaczona do użycia systemu i nie powinna być wywoływana przez użytkowników.

OutgoingMessageHeaders

Pobiera nagłówki komunikatów wychodzących dla aktywnego OperationContextpliku .

OutgoingMessageProperties

Pobiera właściwości komunikatu dla komunikatu wychodzącego w aktywnym OperationContextobiekcie .

RequestContext

Pobiera lub ustawia implementację RequestContext dla tej metody.

ServiceSecurityContext

Pobiera lub ustawia ServiceSecurityContext element, w którym jest wykonywana ta metoda.

SessionId

Pobiera element String używany do identyfikowania bieżącej sesji.

SupportingTokens

Pobiera typ ICollection<T>SecurityToken.

Metody

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
GetCallbackChannel<T>()

Pobiera kanał do wystąpienia klienta, który nazwał bieżącą operację.

GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetType()

Type Pobiera bieżące wystąpienie.

(Odziedziczone po Object)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
SetTransactionComplete()

Zatwierdza aktualnie wykonującą transakcję.

ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Zdarzenia

OperationCompleted

Występuje po zakończeniu operacji.

Dotyczy

Produkt Wersje
.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