OperationContextScope OperationContextScope OperationContextScope OperationContextScope Class

Definition

Erstellt einen Block, in dessen Bereich sich ein OperationContext-Objekt befindet.Creates a block within which an OperationContext object is in scope.

public ref class OperationContextScope sealed : IDisposable
public sealed class OperationContextScope : IDisposable
type OperationContextScope = class
    interface IDisposable
Public NotInheritable Class OperationContextScope
Implements IDisposable
Vererbung
OperationContextScopeOperationContextScopeOperationContextScopeOperationContextScope
Implementiert

Beispiele

Im nachstehenden Beispiel ist dargestellt, wie mit dem OperationContextScope ein neuer Kontext in einer Clientanwendung erstellt und der ausgehenden Nachricht ein benutzerdefinierter Header hinzugefügt werden kann.The following example shows how to use the OperationContextScope to create a new context in a client application to add a custom header to the outgoing message.

using System;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.Threading;
 
public class Client : ISampleServiceCallback
{
  ManualResetEvent wait = null;

  Client()
  {
    this.wait = new ManualResetEvent(false);
  }

  public static void Main()
  {
    Client client = new Client();
    client.Run();
  }

  void Run()
  {
    // Picks up configuration from the config file.
    SampleServiceClient wcfClient = new SampleServiceClient(new InstanceContext(this));
    try
    {
      using (OperationContextScope scope = new OperationContextScope(wcfClient.InnerChannel))
      {
        MessageHeader header
          = MessageHeader.CreateHeader(
          "Service-Bound-CustomHeader",
          "http://Microsoft.WCF.Documentation",
          "Custom Happy Value."
          );
        OperationContext.Current.OutgoingMessageHeaders.Add(header);

        // Making calls.
        Console.WriteLine("Enter the greeting to send: ");
        string greeting = Console.ReadLine();

        //Console.ReadLine();
        header = MessageHeader.CreateHeader(
            "Service-Bound-OneWayHeader",
            "http://Microsoft.WCF.Documentation",
            "Different Happy Value."
          );
        OperationContext.Current.OutgoingMessageHeaders.Add(header);

        // One-way
        wcfClient.Push(greeting);
        this.wait.WaitOne();

        // Done with service. 
        wcfClient.Close();
        Console.WriteLine("Done!");
        Console.ReadLine();
      }
    }
    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();
    }
  }


  #region ISampleServiceCallback Members

  public void PushBack(string msg)
  {
    Console.WriteLine("Service said: " + msg);
    this.WriteHeaders(OperationContext.Current.IncomingMessageHeaders);
    this.wait.Set();
  }

  void WriteHeaders(MessageHeaders headers)
  {
    Console.ForegroundColor = ConsoleColor.Red;
    Console.WriteLine("IncomingHeader:");
    Console.ForegroundColor = ConsoleColor.Blue;
    foreach (MessageHeaderInfo h in headers)
    {
      if (!h.Actor.Equals(String.Empty))
        Console.WriteLine("\t" + h.Actor);
      Console.ForegroundColor = ConsoleColor.White;
      Console.WriteLine("\t" + h.Name);
      Console.ForegroundColor = ConsoleColor.Blue;
      Console.WriteLine("\t" + h.Namespace);
      Console.WriteLine("\t" + h.Relay);
      if (h.IsReferenceParameter == true)
      {
        Console.WriteLine("IsReferenceParameter header detected: " + h.ToString());
      }
    }
    Console.ResetColor();
  }
  #endregion

}
Imports System.ServiceModel
Imports System.ServiceModel.Channels
Imports System.Threading

Public Class Client
	Implements ISampleServiceCallback
  Private wait As ManualResetEvent = Nothing

  Private Sub New()
	Me.wait = New ManualResetEvent(False)
  End Sub

  Public Shared Sub Main()
	Dim client As New Client()
	client.Run()
  End Sub

  Private Sub Run()
	' Picks up configuration from the config file.
	Dim wcfClient As New SampleServiceClient(New InstanceContext(Me))
	Try
	  Using scope As New OperationContextScope(wcfClient.InnerChannel)
                Dim header As MessageHeader = MessageHeader.CreateHeader("Service-Bound-CustomHeader", _
                                    "http://Microsoft.WCF.Documentation", "Custom Happy Value.")
		OperationContext.Current.OutgoingMessageHeaders.Add(header)

		' Making calls.
		Console.WriteLine("Enter the greeting to send: ")
		Dim greeting As String = Console.ReadLine()

		'Console.ReadLine();
                header = MessageHeader.CreateHeader("Service-Bound-OneWayHeader", _
                                                    "http://Microsoft.WCF.Documentation", "Different Happy Value.")
		OperationContext.Current.OutgoingMessageHeaders.Add(header)

		' One-way
		wcfClient.Push(greeting)
		Me.wait.WaitOne()

		' Done with service. 
		wcfClient.Close()
		Console.WriteLine("Done!")
		Console.ReadLine()
	  End Using
	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


  #Region "ISampleServiceCallback Members"

  Public Sub PushBack(ByVal msg As String) Implements ISampleServiceCallback.PushBack
	Console.WriteLine("Service said: " & msg)
	Me.WriteHeaders(OperationContext.Current.IncomingMessageHeaders)
	Me.wait.Set()
  End Sub

  Private Sub WriteHeaders(ByVal headers As MessageHeaders)
	Console.ForegroundColor = ConsoleColor.Red
	Console.WriteLine("IncomingHeader:")
	Console.ForegroundColor = ConsoleColor.Blue
	For Each h As MessageHeaderInfo In headers
	  If Not h.Actor.Equals(String.Empty) Then
		Console.WriteLine(vbTab & h.Actor)
	  End If
	  Console.ForegroundColor = ConsoleColor.White
	  Console.WriteLine(vbTab & h.Name)
	  Console.ForegroundColor = ConsoleColor.Blue
	  Console.WriteLine(vbTab & h.Namespace)
	  Console.WriteLine(vbTab & h.Relay)
	  If h.IsReferenceParameter = True Then
		Console.WriteLine("IsReferenceParameter header detected: " & h.ToString())
	  End If
	Next h
	Console.ResetColor()
  End Sub
  #End Region

End Class

Hinweise

Verwenden Sie die OperationContextScope-Klasse zur Erstellung eines Bereichs für ein bestimmtes OperationContext-Objekt oder einen Bereich für ein neues OperationContext-Objekt mit einem angegebenen IContextChannel-Objekt.Use the OperationContextScope class to create a scope for a specific OperationContext object or a scope for a new OperationContext object using a specified IContextChannel object. Ein OperationContextScope kann in einem Windows Communication Foundation (WCF)-Dienst oder die WCF-Clientanwendung verwendet werden.An OperationContextScope can be used in a Windows Communication Foundation (WCF) service or WCF client application.

Sobald das OperationContextScope-Objekt den aktuellen Vorgangskontext hergestellt hat, können Sie den OperationContext zu Folgendem verwenden:Once the OperationContextScope object has established the current operation context, you can use the OperationContext to:

  • Greifen Sie auf eingehende und ausgehenden Nachrichtenheader und andere Eigenschaften zu, und ändern Sie sie.Access and modify incoming and outgoing message headers and other properties.

  • Greifen Sie auf die Laufzeit, einschließlich Verteiler, Host, Kanal und Erweiterungen zu.Access the runtime, including dispatchers, the host, channel, and extensions.

  • Greifen Sie auf andere Kontexttypen zu, wie zum Beispiel Sicherheit, Instanz und Anforderungskontexte.Access other types of contexts, such as security, instance, and request contexts.

  • Greifen Sie auf den dem OperationContext-Objekt zugeordneten Kanal oder (wenn der Kanal System.ServiceModel.Channels.ISession implementiert) die Sitzungs-ID des zugeordneten Kanals zu.Access the channel associated with the OperationContext object or (if the channel implements System.ServiceModel.Channels.ISession) the associated channel's session identifier.

Wenn ein OperationContextScope erstellt wurde, wird der aktuelle OperationContext gespeichert, und der neue OperationContext wird von der Current-Eigenschaft zurückgegeben.When an OperationContextScope is created, the current OperationContext is stored and the new OperationContext becomes the one returned by the Current property. Wenn der OperationContextScope verworfen wird, wird der ursprüngliche OperationContext wiederhergestellt.When the OperationContextScope is disposed, the original OperationContext is restored.

Warnung

Verwenden Sie nicht das asynchrone Muster der "await" innerhalb eines Blocks OperationContextScope.Do not use the asynchronous "await" pattern within a OperationContextScope block. Bei der die Fortsetzung wird in einem anderen Thread ausgeführt werden kann, und OperationContextScope wird, bestimmten Thread.When the continuation occurs, it may run on a different thread and OperationContextScope is thread specific. Bei Bedarf zum Aufrufen von "await" für einen asynchronen Aufruf, verwenden Sie es außerhalb des Blocks OperationContextScope.If you need to call "await" for an async call, use it outside of the OperationContextScope block.

Konstruktoren

OperationContextScope(IContextChannel) OperationContextScope(IContextChannel) OperationContextScope(IContextChannel) OperationContextScope(IContextChannel)

Initalisiert eine neue Instanz der OperationContextScope-Klasse, die mit dem angegebenen IContextChannel einen neuen OperationContext für den Bereich erstellt.Initializes a new instance of the OperationContextScope class that uses the specified IContextChannel to create a new OperationContext for the scope.

OperationContextScope(OperationContext) OperationContextScope(OperationContext) OperationContextScope(OperationContext) OperationContextScope(OperationContext)

Initialisiert eine neue Instanz der OperationContextScope-Klasse zur Erstellung eines Bereichs für das angegebene OperationContext-Objekt.Initializes a new instance of the OperationContextScope class to create a scope for the specified OperationContext object.

Methoden

Dispose() Dispose() Dispose() Dispose()

Stellt den ursprünglichen OperationContext wieder als aktiven Kontext her und verwendet das OperationContextScope-Objekt wieder.Restores the original OperationContext to the active context and recycles the OperationContextScope object.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Bestimmt, ob das angegebene Objekt mit dem aktuellen Objekt identisch ist.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Fungiert als Standardhashfunktion.Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

Ruft den Type der aktuellen Instanz ab.Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.Returns a string that represents the current object.

(Inherited from Object)

Gilt für: