İngilizce dilinde oku

Aracılığıyla paylaş


OperationContextScope Sınıf

Tanım

Bir nesnenin kapsamda olduğu bir OperationContext blok oluşturur.

C#
public sealed class OperationContextScope : IDisposable
Devralma
OperationContextScope
Uygulamalar

Örnekler

Aşağıdaki örnekte, giden iletiye özel üst bilgi eklemek üzere istemci uygulamasında yeni bağlam oluşturmak için öğesinin nasıl kullanılacağı OperationContextScope gösterilmektedir.

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
}

Açıklamalar

Sınıfını OperationContextScope kullanarak belirli bir nesne için bir kapsam veya belirtilen OperationContextIContextChannel bir nesneyi kullanarak yeni OperationContext bir nesnenin kapsamını oluşturun. bir OperationContextScope Windows Communication Foundation (WCF) hizmetinde veya WCF istemci uygulamasında kullanılabilir.

OperationContextScope Nesne geçerli işlem bağlamını oluşturduktan sonra şunu yapmak için kullanabilirsinizOperationContext:

  • Gelen ve giden ileti üst bilgilerine ve diğer özelliklere erişin ve bunları değiştirin.

  • Dağıtıcılar, konak, kanal ve uzantılar dahil olmak üzere çalışma zamanına erişin.

  • Güvenlik, örnek ve istek bağlamları gibi diğer bağlam türlerine erişin.

  • Nesneyle ilişkili kanala OperationContext veya ilişkili kanalın oturum tanımlayıcısını (kanal uyguluyorsa System.ServiceModel.Channels.ISession) erişin.

bir OperationContextScope oluşturulduğunda, geçerli OperationContext depolanır ve yeni OperationContext özelliği tarafından Current döndürülen olur. OperationContextScope atıldığında, özgün OperationContext geri yüklenir.

Uyarı

OperationContextScope bloğu içinde zaman uyumsuz "await" desenini kullanmayın. Devamlılık gerçekleştiğinde, farklı bir iş parçacığında çalışabilir ve OperationContextScope iş parçacığına özgüdür. Zaman uyumsuz bir çağrı için "await" çağrısı yapmanız gerekiyorsa, bunu OperationContextScope bloğunun dışında kullanın.

Oluşturucular

OperationContextScope(IContextChannel)

Kapsam için yeni bir oluşturmak üzere belirtilen IContextChannel öğesini kullanan sınıfının yeni OperationContext bir örneğini OperationContextScope başlatır.

OperationContextScope(OperationContext)

Belirtilen OperationContext nesne için kapsam oluşturmak üzere sınıfının yeni bir örneğini OperationContextScope başlatır.

Yöntemler

Dispose()

Özgün OperationContext dosyayı etkin bağlama geri yükler ve nesneyi geri dönüştürür OperationContextScope .

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetType()

Type Geçerli örneğini alır.

(Devralındığı yer: Object)
MemberwiseClone()

Geçerli Objectöğesinin sığ bir kopyasını oluşturur.

(Devralındığı yer: Object)
ToString()

Geçerli nesneyi temsil eden dizeyi döndürür.

(Devralındığı yer: Object)

Şunlara uygulanır

Ürün Sürümler
.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