CallContext Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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) |