Sdílet prostřednictvím


CallContext Třída

Definice

Poskytuje sadu vlastností, které jsou přenášeny s cestou spouštěcího kódu. Tato třída se nemůže dědit.

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
Dědičnost
CallContext
Atributy

Příklady

Následující příklad kódu ukazuje použití CallContext třídy k přenosu objektů principal a identity do vzdáleného umístění pro identifikaci. Pokud chcete zobrazit kód pro třídu použitou LogicalCallContextData v této ukázce, podívejte se na příklad rozhraní ILogicalThreadAffinative . Pokud chcete zobrazit kód pro třídu použitou HelloServiceClass v této ukázce, podívejte se na příklad metody GetData . Pokud chcete zobrazit kód pro serverovou třídu použitou v této ukázce, podívejte se na příklad pro RegisterActivatedServiceType třídu.

#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

Poznámky

CallContext je specializovaný objekt kolekce podobný vláknu Místní úložiště pro volání metody a poskytuje sloty dat, které jsou jedinečné pro každé logické vlákno spuštění. Sloty nejsou sdíleny napříč kontexty volání v jiných logických vláknech. Objekty lze přidávat do objektu CallContext , který se pohybuje dolů a zálohuje cestou ke spouštěcímu kódu, a zkoumat různé objekty podél cesty.

Když vzdálené volání metody je provedeno na objekt v jiném AppDomain, CallContext třída vygeneruje LogicalCallContext instanci, která cestuje spolu se vzdáleným voláním. Pouze objekty, které zpřístupňují ILogicalThreadAffinative rozhraní a jsou uloženy v objektu CallContextAppDomain , se šíří mimo objekt v objektu LogicalCallContext. Objekty, které nepodporují toto rozhraní, nejsou přenášeny v LogicalCallContext instancích s voláním vzdálené metody.

Poznámka

Všechny metody v nástroji CallContext jsou statické a pracují s kontextem volání v aktuálním Threadobjektu .

Poznámka

Tato třída vyžaduje propojení. Vyvolá SecurityException se, pokud bezprostřední volající nemá oprávnění k infrastruktuře. Další informace najdete v tématu Požadavky na propojení .

Vlastnosti

HostContext

Získá nebo nastaví kontext hostitele přidružené k aktuálnímu vláknu.

Metody

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(Zděděno od Object)
FreeNamedDataSlot(String)

Vyprázdní datový slot se zadaným názvem.

GetData(String)

Načte objekt se zadaným názvem z objektu CallContext.

GetHashCode()

Slouží jako výchozí hashovací funkce.

(Zděděno od Object)
GetHeaders()

Vrátí hlavičky, které jsou odeslány spolu s voláním metody.

GetType()

Získá aktuální Type instanci.

(Zděděno od Object)
LogicalGetData(String)

Načte objekt se zadaným názvem z kontextu logického volání.

LogicalSetData(String, Object)

Uloží daný objekt v kontextu logického volání a přidruží ho k zadanému názvu.

MemberwiseClone()

Vytvoří mělkou kopii aktuálního Objectsouboru .

(Zděděno od Object)
SetData(String, Object)

Uloží daný objekt a přidruží ho k zadanému názvu.

SetHeaders(Header[])

Nastaví hlavičky, které se odesílají spolu s voláním metody.

ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

Platí pro

Viz také