Język

OperationContext Klasa

Definicja

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

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)
Dziedziczenie
OperationContext
Implementuje

Przykłady

W poniższym przykładzie kodu użyto 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, dzięki czemu usługa i klient mogą komunikować się niezależnie w obu kierunkach. W takim przypadku przykładowa aplikacja kliencka oczekuje tylko jednego wywołania zwrotnego przed jego zakończeniem, ale inny klient, na przykład klient windows Forms, może odbierać dowolną liczbę wywołań z usługi.

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 w SampleDuplexHelloCallback celu odebrania komunikatu wywołania zwrotnego. Zaimportowany 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 odbierać wywołanie zwrotne; wywołanie zwrotne serwera jest całkowicie niezależne od wywołania wychodzącego klienta.

Note

Przykład, który używa OperationContext klasy w scenariuszu klienta, zobacz 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();
    }
  }
}

Uwagi

OperationContext Użyj elementu z wewnątrz 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 między częściami 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 wiadomości.

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

Nazwisko Opis
OperationContext(IContextChannel)

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

Właściwości

Nazwisko Opis
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 elementu OperationContext.

IncomingMessageProperties

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

IncomingMessageVersion

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

InstanceContext

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

IsUserContext

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

OutgoingMessageHeaders

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

OutgoingMessageProperties

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

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

Nazwisko Opis
Equals(Object)

Określa, czy określony obiekt jest równy bieżącemu obiektowi.

(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()

Pobiera Type bieżącego wystąpienia.

(Odziedziczone po Object)
MemberwiseClone()

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

(Odziedziczone po Object)
SetTransactionComplete()

Zatwierdza aktualnie wykonującą transakcję.

ToString()

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

(Odziedziczone po Object)

Zdarzenia

Nazwisko Opis
OperationCompleted

Występuje po zakończeniu operacji.

Dotyczy