CallContext クラス
アセンブリ: mscorlib (mscorlib.dll 内)


CallContext は、メソッド呼び出しのスレッド ローカル ストレージに似た専用のコレクション オブジェクトで、実行の各論理スレッドに対して一意のデータ スロットを提供します。そのスロットは、他の論理スレッドの呼び出しコンテキスト間で共有されません。実行コード パスの走査およびバックアップ時に、オブジェクトが CallContext に追加され、パスに沿ってさまざまなオブジェクトでチェックされることがあります。
別の AppDomain 内のオブジェクトに対してリモート メソッド呼び出しが実行された場合、CallContext クラスは、そのリモート呼び出しと共に転送される LogicalCallContext インスタンスを生成します。ILogicalThreadAffinative インターフェイスを公開し、CallContext 内に格納されているオブジェクトだけが LogicalCallContext に格納され、AppDomain の外部に転送されます。このインターフェイスをサポートしていないオブジェクトは、リモートのメソッド呼び出しで生成される LogicalCallContext インスタンスでは転送されません。
![]() |
---|

CallContext クラスを使用して、識別のためにリモートの場所に プリンシパル オブジェクトと ID オブジェクト を送信する例を次のコードに示します。サンプルで使用する LogicalCallContextData クラスのコードを表示するには、ILogicalThreadAffinative インターフェイスのトピックの例を参照してください。サンプルで使用する HelloServiceClass クラスのコードを表示するには、GetData メソッドのトピックの例を参照してください。この例で使用されているサーバー クラスのコードを確認するには、RegisterActivatedServiceType クラスの例を参照してください。
Imports System Imports System.Runtime.Remoting Imports System.Runtime.Remoting.Channels Imports System.Runtime.Remoting.Channels.Tcp Imports System.Runtime.Remoting.Messaging Imports System.Security.Principal Imports System.Security.Permissions Public Class ClientClass <PermissionSet(SecurityAction.LinkDemand)> _ Public Shared Sub Main() Dim ident As New GenericIdentity("Bob") Dim prpal As New GenericPrincipal(ident, New String() {"Level1"}) Dim data As New LogicalCallContextData(prpal) 'Enter data into the CallContext CallContext.SetData("test data", data) Console.WriteLine(data.numOfAccesses) ChannelServices.RegisterChannel(New TcpChannel()) RemotingConfiguration.RegisterActivatedClientType(GetType(HelloServiceClass), "tcp://localhost:8082") Dim service As New HelloServiceClass() If service Is Nothing Then Console.WriteLine("Could not locate server.") Return End If ' call remote method Console.WriteLine() Console.WriteLine("Calling remote object") Console.WriteLine(service.HelloMethod("Caveman")) Console.WriteLine(service.HelloMethod("Spaceman")) Console.WriteLine(service.HelloMethod("Bob")) Console.WriteLine("Finished remote object call") Console.WriteLine() 'Extract the returned data from the call context Dim returnedData As LogicalCallContextData = CType(CallContext.GetData("test data"), LogicalCallContextData) Console.WriteLine(data.numOfAccesses) Console.WriteLine(returnedData.numOfAccesses) End Sub 'Main End Class 'ClientClass
using System; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Tcp; using System.Runtime.Remoting.Messaging; using System.Security.Principal; using System.Security.Permissions; public class ClientClass { [PermissionSet(SecurityAction.LinkDemand)] public static void Main() { GenericIdentity ident = new GenericIdentity("Bob"); GenericPrincipal prpal = new GenericPrincipal(ident, new string[] {"Level1"}); LogicalCallContextData data = new LogicalCallContextData(prpal); //Enter data into the CallContext CallContext.SetData("test data", data); Console.WriteLine(data.numOfAccesses); ChannelServices.RegisterChannel(new TcpChannel()); RemotingConfiguration.RegisterActivatedClientType(typeof(HelloServiceClass) , "tcp://localhost:8082"); HelloServiceClass service = new HelloServiceClass(); if(service == null) { Console.WriteLine("Could not locate server."); return; } // call remote method Console.WriteLine(); Console.WriteLine("Calling remote object"); Console.WriteLine(service.HelloMethod("Caveman")); Console.WriteLine(service.HelloMethod("Spaceman")); Console.WriteLine(service.HelloMethod("Bob")); Console.WriteLine("Finished remote object call"); Console.WriteLine(); //Extract the returned data from the call context LogicalCallContextData returnedData = (LogicalCallContextData)CallContext.GetData("test data"); Console.WriteLine(data.numOfAccesses); Console.WriteLine(returnedData.numOfAccesses); } }
#using <system.dll> #using <system.runtime.remoting.dll> #using <service.dll> using namespace System; using namespace System::Runtime::Remoting; using namespace System::Runtime::Remoting::Channels; using namespace System::Runtime::Remoting::Channels::Tcp; using namespace System::Runtime::Remoting::Messaging; using namespace System::Security::Principal; int main() { GenericIdentity^ ident = gcnew GenericIdentity( "Bob" ); array<String^>^id = gcnew array<String^>(1); id[ 0 ] = "Level1"; GenericPrincipal^ prpal = gcnew GenericPrincipal( ident,id ); LogicalCallContextData ^ data = gcnew LogicalCallContextData( prpal ); //Enter data into the CallContext CallContext::SetData( "test data", data ); Console::WriteLine( data->numOfAccesses ); ChannelServices::RegisterChannel( gcnew TcpChannel ); RemotingConfiguration::RegisterActivatedClientType( HelloServiceClass::typeid, "tcp://localhost:8082" ); HelloServiceClass ^ service = gcnew HelloServiceClass; if ( service == nullptr ) { Console::WriteLine( "Could not locate server." ); return 0; } // call remote method Console::WriteLine(); Console::WriteLine( "Calling remote Object*" ); Console::WriteLine( service->HelloMethod( "Caveman" ) ); Console::WriteLine( service->HelloMethod( "Spaceman" ) ); Console::WriteLine( service->HelloMethod( "Bob" ) ); Console::WriteLine( "Finished remote Object* call" ); Console::WriteLine(); //Extract the returned data from the call context LogicalCallContextData ^ returnedData = static_cast<LogicalCallContextData ^>(CallContext::GetData( "test data" )); Console::WriteLine( data->numOfAccesses ); Console::WriteLine( returnedData->numOfAccesses ); return 0; }


System.Runtime.Remoting.Messaging.CallContext


Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


CallContext プロパティ
CallContext メソッド

名前 | 説明 | |
---|---|---|
![]() | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 ( Object から継承されます。) |
![]() | FreeNamedDataSlot | 指定した名前のデータ スロットを空にします。 |
![]() | GetData | CallContext から指定した名前のオブジェクトを取得します。 |
![]() | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 ( Object から継承されます。) |
![]() | GetHeaders | メソッド呼び出しと共に送信するヘッダーを返します。 |
![]() | GetType | 現在のインスタンスの Type を取得します。 ( Object から継承されます。) |
![]() | LogicalGetData | 論理呼び出しコンテキストから、指定された名前のオブジェクトを取得します。 |
![]() | LogicalSetData | 論理呼び出しコンテキストに特定のオブジェクトを格納し、指定した名前に関連付けます。 |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 ( Object から継承されます。) |
![]() | SetData | 特定のオブジェクトを格納し、指定した名前に関連付けます。 |
![]() | SetHeaders | メソッド呼び出しと共に送信するヘッダーを設定します。 |
![]() | ToString | 現在の Object を表す String を返します。 ( Object から継承されます。) |

CallContext メンバ
実行コード パスと共に渡されるプロパティのセットを提供します。このクラスは継承できません。
CallContext データ型で公開されるメンバを以下の表に示します。


名前 | 説明 | |
---|---|---|
![]() | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 (Object から継承されます。) |
![]() | FreeNamedDataSlot | 指定した名前のデータ スロットを空にします。 |
![]() | GetData | CallContext から指定した名前のオブジェクトを取得します。 |
![]() | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 (Object から継承されます。) |
![]() | GetHeaders | メソッド呼び出しと共に送信するヘッダーを返します。 |
![]() | GetType | 現在のインスタンスの Type を取得します。 (Object から継承されます。) |
![]() | LogicalGetData | 論理呼び出しコンテキストから、指定された名前のオブジェクトを取得します。 |
![]() | LogicalSetData | 論理呼び出しコンテキストに特定のオブジェクトを格納し、指定した名前に関連付けます。 |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 (Object から継承されます。) |
![]() | SetData | 特定のオブジェクトを格納し、指定した名前に関連付けます。 |
![]() | SetHeaders | メソッド呼び出しと共に送信するヘッダーを設定します。 |
![]() | ToString | 現在の Object を表す String を返します。 (Object から継承されます。) |

- CallContextのページへのリンク