Compartir vía


CallContext Clase

Definición

Proporciona un conjunto de propiedades que se incluyen con la ruta de acceso del código de ejecución. Esta clase no puede heredarse.

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
Herencia
CallContext
Atributos

Ejemplos

En el ejemplo de código siguiente se muestra el uso de la CallContext clase para transmitir objetos de entidad de seguridad e identidad a una ubicación remota para la identificación. Para ver el código de la LogicalCallContextData clase usada en este ejemplo, vea el ejemplo de la ILogicalThreadAffinative interfaz . Para ver el código de la HelloServiceClass clase usada en este ejemplo, vea el ejemplo del GetData método . Para ver el código de la clase de servidor usada en este ejemplo, vea el ejemplo de la RegisterActivatedServiceType clase .

#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

Comentarios

CallContext es un objeto de colección especializado similar a un almacenamiento local de subprocesos para llamadas de método y proporciona ranuras de datos únicas para cada subproceso lógico de ejecución. Las ranuras no se comparten entre contextos de llamada en otros subprocesos lógicos. Los objetos se pueden agregar a a CallContext medida que viaja hacia abajo y hace una copia de seguridad de la ruta de acceso del código de ejecución y se examinan por varios objetos a lo largo de la ruta de acceso.

Cuando se realiza una llamada de método remoto a un objeto en otro AppDomain, la CallContext clase genera una LogicalCallContext instancia que viaja junto con la llamada remota. Solo los objetos que exponen la ILogicalThreadAffinative interfaz y se almacenan en CallContext se propagan fuera de AppDomain en .LogicalCallContext Los objetos que no admiten esta interfaz no se transmiten en LogicalCallContext instancias con llamadas de método remoto.

Nota

Todos los métodos de CallContext son estáticos y operan en el contexto de llamada en el actual Thread.

Nota

Esta clase realiza una demanda de vínculo. Se produce una SecurityException excepción si el llamador inmediato no tiene permiso de infraestructura. Consulte Peticiones de vínculo para obtener más información.

Propiedades

HostContext

Obtiene o establece el contexto del host asociado al subproceso actual.

Métodos

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
FreeNamedDataSlot(String)

Vacía una ranura de datos con el nombre especificado.

GetData(String)

Recupera un objeto con el nombre especificado de CallContext.

GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetHeaders()

Devuelve los encabezados que se envían junto con la llamada al método.

GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
LogicalGetData(String)

Recupera un objeto con el nombre especificado del contexto de llamada lógico.

LogicalSetData(String, Object)

Almacena un objeto determinado en el contexto de llamada lógico y lo asocia al nombre especificado.

MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
SetData(String, Object)

Almacena un objeto dado y lo asocia al nombre especificado.

SetHeaders(Header[])

Establece los encabezados que se envían junto con la llamada al método.

ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Se aplica a

Consulte también