Condividi tramite


CallContext Classe

Definizione

Fornisce un insieme di proprietà riportate con il percorso del codice di esecuzione. La classe non può essere ereditata.

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
Ereditarietà
CallContext
Attributi

Esempio

Nell'esempio di codice seguente viene illustrato l'uso della classe per trasmettere entità e oggetti identity a una posizione remota per l'identificazioneCallContext. Per visualizzare il codice per la LogicalCallContextData classe usata in questo esempio, vedere l'esempio per l'interfaccia ILogicalThreadAffinative . Per visualizzare il codice per la HelloServiceClass classe usata in questo esempio, vedere l'esempio per il GetData metodo . Per visualizzare il codice per la classe server usata in questo esempio, vedere l'esempio per la RegisterActivatedServiceType classe .

#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

Commenti

CallContext è un oggetto di raccolta specializzato simile a un'archiviazione locale thread per le chiamate al metodo e fornisce slot di dati univoci per ogni thread logico di esecuzione. Gli slot non vengono condivisi tra contesti di chiamata in altri thread logici. Gli oggetti possono essere aggiunti all'oggetto CallContext durante il viaggio verso il basso e il backup del percorso del codice di esecuzione e esaminati da vari oggetti lungo il percorso.

Quando viene eseguita una chiamata al metodo remoto a un oggetto in un altro AppDomain, la CallContext classe genera un'istanza LogicalCallContext che viaggia insieme alla chiamata remota. Solo gli oggetti che espongono l'interfaccia e vengono archiviati nell'oggetto CallContext vengono propagati all'esterno ILogicalThreadAffinative di AppDomain un LogicalCallContextoggetto . Gli oggetti che non supportano questa interfaccia non vengono trasmessi in LogicalCallContext istanze con chiamate di metodo remote.

Nota

Tutti i metodi in CallContext sono statici e operano sul contesto della chiamata nell'oggetto corrente Thread.

Nota

Questa classe rende una richiesta di collegamento. Viene generato se SecurityException il chiamante immediato non dispone dell'autorizzazione dell'infrastruttura. Per altre informazioni, vedere Richieste di collegamento .

Proprietà

HostContext

Ottiene o imposta il contesto host associato al thread corrente.

Metodi

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
FreeNamedDataSlot(String)

Svuota uno slot di dati con il nome specificato.

GetData(String)

Restituisce un oggetto con il nome specificato da CallContext.

GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetHeaders()

Restituisce le intestazioni inviate insieme alla chiamata di metodo.

GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
LogicalGetData(String)

Recupera un oggetto con il nome specificato dal contesto di chiamata logico.

LogicalSetData(String, Object)

Memorizza un determinato oggetto nel contesto di chiamata logico e lo associa al nome specificato.

MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
SetData(String, Object)

Memorizza un determinato oggetto e lo associa al nome specificato.

SetHeaders(Header[])

Imposta le intestazioni inviate insieme alla chiamata di metodo.

ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Si applica a

Vedi anche