CallContext クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
実行コード パスと共に渡されるプロパティのセットを提供します。 このクラスは継承できません。
public ref class CallContext sealed
[System.Serializable]
public sealed class CallContext
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class CallContext
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
[System.Security.SecurityCritical]
public sealed class CallContext
[<System.Serializable>]
type CallContext = class
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type CallContext = class
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
[<System.Security.SecurityCritical>]
type CallContext = class
Public NotInheritable Class CallContext
- 継承
-
CallContext
- 属性
例
次のコード例では、 クラスを CallContext 使用して 、プリンシパル オブジェクトと ID オブジェクトを 識別のためにリモートの場所に送信する方法を示します。 このサンプルで使用されるクラスのコードを LogicalCallContextData
表示するには、 インターフェイスの例を ILogicalThreadAffinative 参照してください。 このサンプルで使用されるクラスのコードを HelloServiceClass
表示するには、 メソッドの例を GetData 参照してください。 このサンプルで使用されているサーバー クラスのコードを表示するには、 クラスの例を RegisterActivatedServiceType 参照してください。
#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;
}
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 {
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);
}
}
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
End Class
注釈
CallContext は、メソッド呼び出し用の Thread Local Storage に似た特殊なコレクション オブジェクトであり、実行の各論理スレッドに固有のデータ スロットを提供します。 スロットは、他の論理スレッド上の呼び出しコンテキスト間で共有されません。 オブジェクトは、実行コード パスを移動してバックアップする場合に に CallContext 追加し、パスに沿ってさまざまなオブジェクトによって検査できます。
別AppDomainCallContextの の オブジェクトに対してリモート メソッド呼び出しが行われると、クラスはリモート呼び出しと共に移動するインスタンスを生成LogicalCallContextします。 インターフェイスを公開し、 にILogicalThreadAffinativeCallContext格納されているオブジェクトのみが 内の のAppDomain外部にLogicalCallContext伝達されます。 このインターフェイスをサポートしていないオブジェクトは、リモート メソッド呼び出しを使用するインスタンスでは LogicalCallContext 送信されません。
注意
のすべての CallContext メソッドは静的であり、現在 Threadの の呼び出しコンテキストで動作します。
注意
このクラスは、リンク要求を行います。 SecurityException
直接の呼び出し元にインフラストラクチャアクセス許可がない場合は、 がスローされます。 詳細については、「 リンク要求 」を参照してください。
プロパティ
HostContext |
現在のスレッドに関連付けられているホスト コンテキストを取得または設定します。 |
メソッド
Equals(Object) |
指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。 (継承元 Object) |
FreeNamedDataSlot(String) |
指定した名前のデータ スロットを空にします。 |
GetData(String) |
CallContext から指定した名前のオブジェクトを取得します。 |
GetHashCode() |
既定のハッシュ関数として機能します。 (継承元 Object) |
GetHeaders() |
メソッド呼び出しと共に送信するヘッダーを返します。 |
GetType() |
現在のインスタンスの Type を取得します。 (継承元 Object) |
LogicalGetData(String) |
論理呼び出しコンテキストから、指定された名前のオブジェクトを取得します。 |
LogicalSetData(String, Object) |
論理呼び出しコンテキストに特定のオブジェクトを格納し、指定した名前に関連付けます。 |
MemberwiseClone() |
現在の Object の簡易コピーを作成します。 (継承元 Object) |
SetData(String, Object) |
特定のオブジェクトを格納し、指定した名前に関連付けます。 |
SetHeaders(Header[]) |
メソッド呼び出しと共に送信するヘッダーを設定します。 |
ToString() |
現在のオブジェクトを表す文字列を返します。 (継承元 Object) |
適用対象
こちらもご覧ください
.NET