CallContext Classe

Definição

Fornece um conjunto de propriedades que são transportadas com o caminho do código de execução. Esta classe não pode ser herdada.

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
Herança
CallContext
Atributos

Exemplos

O exemplo de código seguinte demonstra o uso da CallContext classe para transmitir Objetos Principal e Identidade para uma localização remota para identificação. Para visualizar o código da LogicalCallContextData classe usada neste exemplo, veja o exemplo da ILogicalThreadAffinative interface. Para visualizar o código da HelloServiceClass classe usada neste exemplo, veja o exemplo do GetData método. Para ver o código da classe servidor usada neste exemplo, veja o exemplo da 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

Observações

CallContext é um objeto de coleção especializado semelhante a um Thread Local Storage para chamadas de método e fornece espaços de dados únicos para cada thread lógico de execução. Os slots não são partilhados entre contextos de chamada noutros threads lógicos. Os objetos podem ser adicionados à CallContext medida que desce e voltam a subir o caminho do código de execução, e examinados por vários objetos ao longo do caminho.

Quando uma chamada remota de método é feita a um objeto noutro AppDomain, a CallContext classe gera uma LogicalCallContext instância que viaja juntamente com a chamada remota. Apenas os objetos que expõem a ILogicalThreadAffinative interface e são armazenados em o CallContext são propagados fora do AppDomain em um LogicalCallContext. Objetos que não suportam esta interface não são transmitidos em LogicalCallContext instâncias com chamadas de método remotas.

Note

Todos os métodos em CallContext são estáticos e operam no contexto de chamada na corrente Thread.

Note

Esta aula exige uma ligação. A é lançado se o chamador imediato não tiver autorização de SecurityException infraestrutura. Consulte o link Exigências para mais informações.

Propriedades

Name Description
HostContext

Obtém ou define o contexto anfitrião associado à thread atual.

Métodos

Name Description
Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
FreeNamedDataSlot(String)

Esvazia um slot de dados com o nome especificado.

GetData(String)

Recupera um objeto com o nome especificado a partir do CallContext.

GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetHeaders()

Devolve os cabeçalhos enviados juntamente com a chamada ao método.

GetType()

Obtém o Type da instância atual.

(Herdado de Object)
LogicalGetData(String)

Recupera um objeto com o nome especificado do contexto de chamada lógica.

LogicalSetData(String, Object)

Armazena um dado objeto no contexto da chamada lógica e associa-o ao nome especificado.

MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
SetData(String, Object)

Armazena um dado objeto e associa-o ao nome especificado.

SetHeaders(Header[])

Define os cabeçalhos que são enviados juntamente com a chamada de método.

ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)

Aplica-se a

Ver também