Esta documentación está archivada y no tiene mantenimiento.

OperationContextScope (Clase)

Actualización: noviembre 2007

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

Espacio de nombres:  System.ServiceModel
Ensamblado:  System.ServiceModel (en System.ServiceModel.dll)

public sealed class OperationContextScope : IDisposable
public final class OperationContextScope implements IDisposable
public final class OperationContextScope implements IDisposable

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. OperationContextScope puede utilizarse en un servicio Windows Communication Foundation (WCF) o 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.

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.

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

}


System.Object
  System.ServiceModel.OperationContextScope

Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Windows Vista, Windows XP SP2, Windows Server 2003

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

.NET Framework

Compatible con: 3.5, 3.0
Mostrar: