CallContext クラス

定義

実行コード パスと共に渡されるプロパティのセットを提供します。 このクラスは継承できません。

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)

適用対象

こちらもご覧ください