Partilhar via


CallContext Classe

Definição

Fornece um conjunto de propriedades que são executadas com o caminho do código de execução. Essa 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 a seguir demonstra o uso da CallContext classe para transmitir objetos principal e de identidade para um local remoto para identificação. Para exibir o código da LogicalCallContextData classe usada neste exemplo, consulte o exemplo para a ILogicalThreadAffinative interface . Para exibir o código da HelloServiceClass classe usada neste exemplo, consulte o exemplo do GetData método . Para exibir o código da classe de servidor usada neste exemplo, consulte 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

Comentários

CallContext é um objeto de coleção especializado semelhante a um Armazenamento Local de Thread para chamadas de método e fornece slots de dados exclusivos para cada thread lógico de execução. Os slots não são compartilhados entre contextos de chamada em outros threads lógicos. Os objetos podem ser adicionados ao conforme ele viaja para CallContext baixo e faz backup do caminho do código de execução e examinados por vários objetos ao longo do caminho.

Quando uma chamada de método remoto é feita a um objeto em outro AppDomain, a CallContext classe gera uma LogicalCallContext instância que viaja junto com a chamada remota. Somente os objetos que expõem a ILogicalThreadAffinative interface e são armazenados no CallContext são propagados fora do AppDomain em um LogicalCallContext. Objetos que não dão suporte a essa interface não são transmitidos em LogicalCallContext instâncias com chamadas de método remoto.

Observação

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

Observação

Essa classe faz uma demanda de link. Um SecurityException será gerado se o chamador imediato não tiver permissão de infraestrutura. Consulte Demandas de link para obter mais informações.

Propriedades

HostContext

Obtém ou define o contexto de host associado ao thread atual.

Métodos

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 do CallContext.

GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetHeaders()

Retorna os cabeçalhos que são enviados junto com a chamada do 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 determinado objeto no contexto de chamada lógica e associa-o ao nome especificado.

MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
SetData(String, Object)

Armazena um determinado objeto e o associa com o nome especificado.

SetHeaders(Header[])

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

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Aplica-se a

Confira também