OperationContextScope OperationContextScope OperationContextScope OperationContextScope Class

定義

スコープに OperationContext オブジェクトが含まれるブロックを作成します。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
継承
OperationContextScopeOperationContextScopeOperationContextScopeOperationContextScope
実装

次の例では、送信メッセージにカスタム ヘッダーを追加するために、OperationContextScope を使用してクライアント アプリケーションに新しいコンテキストを作成する方法を示しています。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

注釈

OperationContextScope クラスを使用して、指定した OperationContext オブジェクトを使用する特定の OperationContext オブジェクトまたは新しいIContextChannel オブジェクトのスコープを作成します。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. OperationContextScope Windows Communication Foundation (WCF) サービスまたは WCF クライアント アプリケーションで使用できます。An OperationContextScope can be used in a Windows Communication Foundation (WCF) service or WCF client application.

OperationContextScope オブジェクトが現在の操作コンテキストを確立した後は、OperationContext を使用して、次の操作を実行できます。Once the OperationContextScope object has established the current operation context, you can use the OperationContext to:

  • 受信メッセージと送信メッセージのヘッダーと他のプロパティにアクセスして変更します。Access and modify incoming and outgoing message headers and other properties.

  • ディスパッチャー、ホスト、チャネル、および拡張を含むランタイムにアクセスします。Access the runtime, including dispatchers, the host, channel, and extensions.

  • セキュリティ、インスタンス、および要求コンテキストなどの他の種類のコンテキストにアクセスします。Access other types of contexts, such as security, instance, and request contexts.

  • OperationContext オブジェクトに関連付けられたチャネルにアクセスします。チャネルが System.ServiceModel.Channels.ISession を実装する場合は、関連付けられたチャネルのセッション ID にアクセスします。Access the channel associated with the OperationContext object or (if the channel implements System.ServiceModel.Channels.ISession) the associated channel's session identifier.

OperationContextScope が作成されると、現在の OperationContext は保存され、新しい OperationContextCurrent プロパティによって返される値になります。When an OperationContextScope is created, the current OperationContext is stored and the new OperationContext becomes the one returned by the Current property. OperationContextScope が破棄されると、元の OperationContext が復元されます。When the OperationContextScope is disposed, the original OperationContext is restored.

警告

OperationContextScope ブロック内で"await"の非同期パターンを使わないでください。Do not use the asynchronous "await" pattern within a OperationContextScope block. 継続が発生して別のスレッドで実行される可能性が、OperationContextScope はスレッドを特定します。When the continuation occurs, it may run on a different thread and OperationContextScope is thread specific. 非同期に呼び出すには、"await"を呼び出す必要がある場合は、OperationContextScope ブロックの外側で使用します。If you need to call "await" for an async call, use it outside of the OperationContextScope block.

コンストラクター

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

指定した OperationContextScope を使用して新しい IContextChannel のスコープを作成する OperationContext クラスの新しいインスタンスを初期化します。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)

指定した OperationContextScope オブジェクトのスコープを作成する OperationContext クラスの新しいインスタンスを初期化します。Initializes a new instance of the OperationContextScope class to create a scope for the specified OperationContext object.

メソッド

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

元の OperationContext をアクティブなコンテキストに復元し、OperationContextScope オブジェクトをリサイクルします。Restores the original OperationContext to the active context and recycles the OperationContextScope object.

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

指定したオブジェクトが、現在のオブジェクトと等しいかどうかを判断します。Determines whether the specified object is equal to the current object.

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

既定のハッシュ関数として機能します。Serves as the default hash function.

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

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

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

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

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

現在のオブジェクトを表す文字列を返します。Returns a string that represents the current object.

(Inherited from Object)

適用対象