OperationContext クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
サービス メソッドの実行コンテキストへのアクセスを提供します。
public ref class OperationContext sealed : System::ServiceModel::IExtensibleObject<System::ServiceModel::OperationContext ^>
public sealed class OperationContext : System.ServiceModel.IExtensibleObject<System.ServiceModel.OperationContext>
type OperationContext = class
interface IExtensibleObject<OperationContext>
Public NotInheritable Class OperationContext
Implements IExtensibleObject(Of OperationContext)
- 継承
-
OperationContext
- 実装
例
次のコード例では、 プロパティと GetCallbackChannel メソッドをCurrent使用して、 メソッド内から呼び出し元にチャネルを取得します。 この例のすべてのメソッドは一方向メソッドであり、サービスおよびクライアントが独立して双方向通信できます。 この場合、クライアント アプリケーションの例では、終了する前に 1 つの戻り呼び出しのみを想定していますが、別のクライアント (Windows フォーム クライアントなど) は、サービスから任意の数の呼び出しを受信できます。
using System;
using System.Collections.Generic;
using System.ServiceModel;
using System.Threading;
namespace Microsoft.WCF.Documentation
{
[ServiceContract(
Name = "SampleDuplexHello",
Namespace = "http://microsoft.wcf.documentation",
CallbackContract = typeof(IHelloCallbackContract),
SessionMode = SessionMode.Required
)]
public interface IDuplexHello
{
[OperationContract(IsOneWay = true)]
void Hello(string greeting);
}
public interface IHelloCallbackContract
{
[OperationContract(IsOneWay = true)]
void Reply(string responseToGreeting);
}
public class DuplexHello : IDuplexHello
{
public DuplexHello()
{
Console.WriteLine("Service object created: " + this.GetHashCode().ToString());
}
~DuplexHello()
{
Console.WriteLine("Service object destroyed: " + this.GetHashCode().ToString());
}
public void Hello(string greeting)
{
Console.WriteLine("Caller sent: " + greeting);
Console.WriteLine("Session ID: " + OperationContext.Current.SessionId);
Console.WriteLine("Waiting two seconds before returning call.");
// Put a slight delay to demonstrate asynchronous behavior on client.
Thread.Sleep(2000);
IHelloCallbackContract callerProxy
= OperationContext.Current.GetCallbackChannel<IHelloCallbackContract>();
string response = "Service object " + this.GetHashCode().ToString() + " received: " + greeting;
Console.WriteLine("Sending back: " + response);
callerProxy.Reply(response);
}
}
}
Imports System.Collections.Generic
Imports System.ServiceModel
Imports System.Threading
Namespace Microsoft.WCF.Documentation
<ServiceContract(Name:="SampleDuplexHello", Namespace:="http://microsoft.wcf.documentation", _
CallbackContract:=GetType(IHelloCallbackContract), SessionMode:=SessionMode.Required)> _
Public Interface IDuplexHello
<OperationContract(IsOneWay:=True)> _
Sub Hello(ByVal greeting As String)
End Interface
Public Interface IHelloCallbackContract
<OperationContract(IsOneWay := True)> _
Sub Reply(ByVal responseToGreeting As String)
End Interface
Public Class DuplexHello
Implements IDuplexHello
Public Sub New()
Console.WriteLine("Service object created: " & Me.GetHashCode().ToString())
End Sub
Protected Overrides Sub Finalize()
Console.WriteLine("Service object destroyed: " & Me.GetHashCode().ToString())
End Sub
Public Sub Hello(ByVal greeting As String) Implements IDuplexHello.Hello
Console.WriteLine("Caller sent: " & greeting)
Console.WriteLine("Session ID: " & OperationContext.Current.SessionId)
Console.WriteLine("Waiting two seconds before returning call.")
' Put a slight delay to demonstrate asynchronous behavior on client.
Thread.Sleep(2000)
Dim callerProxy = OperationContext.Current.GetCallbackChannel(Of IHelloCallbackContract)()
Dim response = "Service object " & Me.GetHashCode().ToString() & " received: " & greeting
Console.WriteLine("Sending back: " & response)
callerProxy.Reply(response)
End Sub
End Class
End Namespace
次のクライアントは、 を SampleDuplexHelloCallback
実装してコールバック メッセージを受信します。 インポートされたコールバック コントラクトは、前の例の プロパティを使用しているため、サービス内の Name コールバック コントラクトと同じ名前ではありません。 クライアントがコールバックを受信するかどうか、または受信タイミングに関する前提はないので、サーバー コールバックがクライアントの送信呼び出しからは完全に独立していることに注意してください。
注意
クライアント シナリオで クラスを OperationContext 使用する例については、「」を参照してください OperationContextScope。
using System;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.Threading;
namespace Microsoft.WCF.Documentation
{
public class Client : SampleDuplexHelloCallback
{
AutoResetEvent waitHandle;
public Client()
{
waitHandle = new AutoResetEvent(false);
}
public void Run()
{
// Picks up configuration from the config file.
SampleDuplexHelloClient wcfClient
= new SampleDuplexHelloClient(new InstanceContext(this));
try
{
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("Enter a greeting to send and press ENTER: ");
Console.Write(">>> ");
Console.ForegroundColor = ConsoleColor.Green;
string greeting = Console.ReadLine();
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("Called service with: \r\n\t" + greeting);
wcfClient.Hello(greeting);
Console.WriteLine("Execution passes service call and moves to the WaitHandle.");
this.waitHandle.WaitOne();
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine("Set was called.");
Console.Write("Press ");
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("ENTER");
Console.ForegroundColor = ConsoleColor.Blue;
Console.Write(" to exit...");
Console.ReadLine();
wcfClient.Close();
}
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();
}
}
public static void Main()
{
Client client = new Client();
client.Run();
}
public void Reply(string response)
{
Console.WriteLine("Received output.");
Console.WriteLine("\r\n\t" + response);
this.waitHandle.Set();
}
}
}
Imports System.ServiceModel
Imports System.ServiceModel.Channels
Imports System.Threading
Namespace Microsoft.WCF.Documentation
Public Class Client
Implements SampleDuplexHelloCallback
Private waitHandle As AutoResetEvent
Public Sub New()
waitHandle = New AutoResetEvent(False)
End Sub
Public Sub Run()
' Picks up configuration from the config file.
Dim wcfClient As New SampleDuplexHelloClient(New InstanceContext(Me))
Try
Console.ForegroundColor = ConsoleColor.White
Console.WriteLine("Enter a greeting to send and press ENTER: ")
Console.Write(">>> ")
Console.ForegroundColor = ConsoleColor.Green
Dim greeting = Console.ReadLine()
Console.ForegroundColor = ConsoleColor.White
Console.WriteLine("Called service with: " & Constants.vbCrLf & Constants.vbTab & greeting)
wcfClient.Hello(greeting)
Console.WriteLine("Execution passes service call and moves to the WaitHandle.")
Me.waitHandle.WaitOne()
Console.ForegroundColor = ConsoleColor.Blue
Console.WriteLine("Set was called.")
Console.Write("Press ")
Console.ForegroundColor = ConsoleColor.Red
Console.Write("ENTER")
Console.ForegroundColor = ConsoleColor.Blue
Console.Write(" to exit...")
Console.ReadLine()
wcfClient.Close()
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
Public Shared Sub Main()
Dim client As New Client()
client.Run()
End Sub
Public Sub Reply(ByVal response As String) Implements SampleDuplexHelloCallback.Reply
Console.WriteLine("Received output.")
Console.WriteLine(Constants.vbCrLf & Constants.vbTab & response)
Me.waitHandle.Set()
End Sub
End Class
End Namespace
注釈
サービス操作内から を OperationContext 使用して、現在の操作実行環境にアクセスします。 特に、操作コンテキストは、双方向サービスでのコールバック チャネルへのアクセス、操作の複数部分に関係する特別な状態データの保存、受信メッセージ ヘッダーとプロパティへのアクセス、および送信メッセージ ヘッダーとプロパティの追加を行うために使用されます。
拡張機能を使用して状態データを格納する方法の詳細については、「 拡張可能オブジェクト」を参照してください。
には OperationContext 、次のプロパティとメソッドがあります。
プロパティは Current 、現在の OperationContext 実行コンテキストを表す オブジェクトを返します。
プロパティは ServiceSecurityContext 、 メソッドが実行されるセキュリティ環境を返します。
プロパティは EndpointDispatcher 、操作 System.ServiceModel.Dispatcher.EndpointDispatcherの を取得します。
プロパティは Extensions 、現在 OperationContextの の拡張コレクションを返します。
プロパティは Host 、サービスを ServiceHostBase 管理する オブジェクトを返します。
プロパティは HasSupportingTokens 、メソッドがサポート トークンを持っているかどうかを示す値を返します。存在する場合、プロパティはトークンを SupportingTokens 取得します。
、IncomingMessageProperties、および IncomingMessageVersion の各プロパティはIncomingMessageHeaders、受信メッセージからこれらの項目を取得します。
操作が OperationCompleted 完了すると、イベントが発生します。
プロパティと OutgoingMessageProperties プロパティはOutgoingMessageHeaders、送信メッセージのこれらの項目を取得します。
プロパティは RequestContext 、 メソッドの RequestContext 実装を返します。
プロパティは InstanceContext 、操作に関連付けられている を InstanceContext 返します。
プロパティは SessionId 、現在のチャネルとオブジェクトのセッション識別子を返します。
メソッドは GetCallbackChannel 、双方向通信の場合に呼び出し元にコールバック チャネルを返します。
メソッドは SetTransactionComplete 、現在のトランザクションをコミットします。
コンストラクター
OperationContext(IContextChannel) |
クライアント アプリケーション内の指定された OperationContext を使用する IContextChannel クラスの新しいインスタンスを初期化します。 |
プロパティ
Channel |
現在の OperationContext オブジェクトに関連付けられているチャネルを取得します。 |
ClaimsPrincipal |
操作に関連付けられているクレーム ベースのプリンシパルを取得します。 |
Current |
現在のスレッドの実行コンテキストを取得または設定します。 |
EndpointDispatcher |
検査または変更するエンドポイントのエンドポイント ディスパッチャーを取得または設定します。 |
Extensions |
現在のメッセージ コンテキストからサービス拡張のコレクションを取得します。 |
HasSupportingTokens |
受信メッセージがトークンをサポートしているかどうかを示す値を取得します。 |
Host |
現在のサービス オブジェクトの ServiceHost を取得します。 |
IncomingMessageHeaders |
OperationContext の受信メッセージ ヘッダーを取得します。 |
IncomingMessageProperties |
OperationContext 内の受信メッセージのメッセージ プロパティを取得します。 |
IncomingMessageVersion |
OperationContext の受信 SOAP メッセージのバージョンを取得します。 |
InstanceContext |
現在のサービス インスタンスを管理する InstanceContext オブジェクトを取得します。 |
IsUserContext |
このプロパティはシステムによる使用を目的としています。ユーザーが呼び出すためのものではありません。 |
OutgoingMessageHeaders |
アクティブな OperationContext の送信メッセージ ヘッダーを取得します。 |
OutgoingMessageProperties |
アクティブな OperationContext 内の送信メッセージのメッセージ プロパティを取得します。 |
RequestContext |
このメソッドの RequestContext 実装を取得または設定します。 |
ServiceSecurityContext |
このメソッドが実行される ServiceSecurityContext を取得または設定します。 |
SessionId |
現在のセッションを識別するために使用される String を取得します。 |
SupportingTokens |
ICollection<T> 型の SecurityToken を取得します。 |
メソッド
Equals(Object) |
指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。 (継承元 Object) |
GetCallbackChannel<T>() |
現在の操作を呼び出したクライアント インスタンスへのチャネルを取得します。 |
GetHashCode() |
既定のハッシュ関数として機能します。 (継承元 Object) |
GetType() |
現在のインスタンスの Type を取得します。 (継承元 Object) |
MemberwiseClone() |
現在の Object の簡易コピーを作成します。 (継承元 Object) |
SetTransactionComplete() |
現在実行中のトランザクションをコミットします。 |
ToString() |
現在のオブジェクトを表す文字列を返します。 (継承元 Object) |
イベント
OperationCompleted |
操作の完了時に発生します。 |
適用対象
.NET