Bagikan melalui


CallContext Kelas

Definisi

Menyediakan sekumpulan properti yang dibawa dengan jalur kode eksekusi. Kelas ini tidak dapat diwariskan.

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
Warisan
CallContext
Atribut

Contoh

Contoh kode berikut menunjukkan penggunaan CallContext kelas untuk mengirimkan Objek Utama dan Identitas ke lokasi jarak jauh untuk identifikasi. Untuk melihat kode untuk kelas yang LogicalCallContextData digunakan dalam sampel ini, lihat contoh antarmuka ILogicalThreadAffinative . Untuk melihat kode untuk kelas yang HelloServiceClass digunakan dalam sampel ini, lihat contoh untuk metode .GetData Untuk melihat kode untuk kelas server yang digunakan dalam sampel ini, lihat contoh untuk RegisterActivatedServiceType kelas .

#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

Keterangan

CallContext adalah objek koleksi khusus yang mirip dengan Thread Local Storage untuk panggilan metode dan menyediakan slot data yang unik untuk setiap utas eksekusi logis. Slot tidak dibagikan di seluruh konteks panggilan pada utas logis lainnya. Objek dapat ditambahkan ke CallContext saat berjalan ke bawah dan mencadangkan jalur kode eksekusi, dan diperiksa oleh berbagai objek di sepanjang jalur.

Ketika panggilan metode jarak jauh dilakukan ke objek di objek lain AppDomain, CallContext kelas menghasilkan instans LogicalCallContext yang melakukan perjalanan bersama dengan panggilan jarak jauh. Hanya objek yang mengekspos ILogicalThreadAffinative antarmuka dan disimpan dalam yang disebarluaskan CallContext di luar AppDomain dalam LogicalCallContext. Objek yang tidak mendukung antarmuka ini tidak ditransmisikan dalam LogicalCallContext instans dengan panggilan metode jarak jauh.

Catatan

Semua metode dalam CallContext bersifat statis dan beroperasi pada konteks panggilan di saat ini Thread.

Catatan

Kelas ini membuat permintaan tautan. SecurityException akan dilemparkan jika penelepon langsung tidak memiliki izin infrastruktur. Lihat Permintaan Tautan untuk informasi selengkapnya.

Properti

HostContext

Mendapatkan atau mengatur konteks host yang terkait dengan utas saat ini.

Metode

Equals(Object)

Menentukan apakah objek yang ditentukan sama dengan objek saat ini.

(Diperoleh dari Object)
FreeNamedDataSlot(String)

Menginisiasi slot data dengan nama yang ditentukan.

GetData(String)

Mengambil objek dengan nama yang ditentukan dari CallContext.

GetHashCode()

Berfungsi sebagai fungsi hash default.

(Diperoleh dari Object)
GetHeaders()

Mengembalikan header yang dikirim bersama dengan panggilan metode.

GetType()

Mendapatkan instans Type saat ini.

(Diperoleh dari Object)
LogicalGetData(String)

Mengambil objek dengan nama yang ditentukan dari konteks panggilan logis.

LogicalSetData(String, Object)

Menyimpan objek tertentu dalam konteks panggilan logis dan mengaitkannya dengan nama yang ditentukan.

MemberwiseClone()

Membuat salinan dangkal dari yang saat ini Object.

(Diperoleh dari Object)
SetData(String, Object)

Menyimpan objek tertentu dan mengaitkannya dengan nama yang ditentukan.

SetHeaders(Header[])

Mengatur header yang dikirim bersama dengan panggilan metode.

ToString()

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)

Berlaku untuk

Lihat juga