Leer en inglés

Compartir a través de


OperationContextScope Clase

Definición

Crea un bloque dentro del cual un objeto OperationContext se encontrará dentro del ámbito.

C#
public sealed class OperationContextScope : IDisposable
Herencia
OperationContextScope
Implementaciones

Ejemplos

El ejemplo siguiente muestra cómo utilizar OperationContextScope para crear un nuevo contexto en una aplicación cliente con objeto de agregar un encabezado personalizado al mensaje saliente.

C#
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)
      {
        Console.WriteLine("IsReferenceParameter header detected: " + h.ToString());
      }
    }
    Console.ResetColor();
  }
  #endregion
}

Comentarios

Utilice la clase OperationContextScope para crear un ámbito para un objeto OperationContext concreto o un ámbito para un nuevo objeto OperationContext utilizando un objeto IContextChannel especificado. Se OperationContextScope puede usar en un servicio de Windows Communication Foundation (WCF) o en una aplicación cliente WCF.

Cuando el objeto OperationContextScope ha establecido el contexto de la operación actual, puede utilizar OperationContext para:

  • Acceder y modificar los encabezados de mensajes entrantes y salientes y demás propiedades.

  • Tener acceso al tiempo de ejecución, incluidos los distribuidores, el host, el canal y las extensiones.

  • Tener acceso a otros tipos de contextos, como la seguridad, la instancia y los contextos de la solicitud.

  • Tener acceso al canal asociado al objeto OperationContext o (si el canal implementa System.ServiceModel.Channels.ISession) el identificador de sesión del canal asociado.

Cuando se crea OperationContextScope, el OperationContext actual está almacenado y el nuevo OperationContext será el que devuelva la propiedad Current. Cuando se dispone OperationContextScope, se restaura el OperationContext original.

Advertencia

No use el patrón asincrónico "await" dentro de un bloque OperationContextScope. Cuando se produce la continuación, puede ejecutarse en un subproceso diferente y OperationContextScope es específico del subproceso. Si necesita llamar a "await" para una llamada asincrónica, úsela fuera del bloque OperationContextScope.

Constructores

OperationContextScope(IContextChannel)

Inicializa un nueva instancia de la clase OperationContextScope que utiliza el IContextChannel especificado para crear un nuevo OperationContext para el ámbito.

OperationContextScope(OperationContext)

Inicializa un nueva instancia de la clase OperationContextScope para crear un ámbito para el objeto OperationContext especificado.

Métodos

Dispose()

Restaura el OperationContext original al contexto activo y recicla el objeto OperationContextScope.

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Se aplica a

Producto Versiones
.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