Partager via


CallContext Classe

Définition

Fournit un jeu de propriétés qui sont acheminées avec le chemin d'accès au code d'exécution. Cette classe ne peut pas être héritée.

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
Héritage
CallContext
Attributs

Exemples

L’exemple de code suivant illustre l’utilisation de la CallContext classe pour transmettre des objets Principal et Identity à un emplacement distant à des fins d’identification. Pour afficher le code de la LogicalCallContextData classe utilisée dans cet exemple, consultez l’exemple pour l’interface ILogicalThreadAffinative . Pour afficher le code de la HelloServiceClass classe utilisée dans cet exemple, consultez l’exemple de la GetData méthode . Pour afficher le code de la classe de serveur utilisée dans cet exemple, consultez l’exemple de 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

Remarques

CallContext est un objet de collection spécialisé similaire à un stockage local thread pour les appels de méthode et fournit des emplacements de données uniques à chaque thread logique d’exécution. Les emplacements ne sont pas partagés entre les contextes d’appel sur d’autres threads logiques. Des objets peuvent être ajoutés à l’objet CallContext au fur et à mesure qu’il descend et sauvegarde le chemin du code d’exécution, puis examinés par différents objets le long du chemin.

Lorsqu’un appel de méthode distante est effectué à un objet dans un autre AppDomain, la CallContext classe génère un LogicalCallContext instance qui se déplace avec l’appel distant. Seuls les objets qui exposent l’interface ILogicalThreadAffinative et sont stockés dans sont CallContext propagés en dehors de dans AppDomain un LogicalCallContext. Les objets qui ne prennent pas en charge cette interface ne sont pas transmis dans LogicalCallContext les instances avec des appels de méthode distante.

Notes

Toutes les méthodes dans CallContext sont statiques et fonctionnent sur le contexte d’appel dans le actuel Thread.

Notes

Cette classe effectue une demande de liaison. Un SecurityException est levée si l’appelant immédiat ne dispose pas de l’autorisation d’infrastructure. Pour plus d’informations, consultez Demandes de liens.

Propriétés

HostContext

Obtient ou définit le contexte hôte associé au thread actuel.

Méthodes

Equals(Object)

Détermine si l'objet spécifié est égal à l'objet actuel.

(Hérité de Object)
FreeNamedDataSlot(String)

Vide un emplacement de données portant le nom spécifié.

GetData(String)

Récupère un objet portant le nom spécifié de CallContext.

GetHashCode()

Fait office de fonction de hachage par défaut.

(Hérité de Object)
GetHeaders()

Retourne les en-têtes envoyés avec l'appel de méthode.

GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
LogicalGetData(String)

Récupère un objet avec le nom spécifié à partir du contexte d'appel logique.

LogicalSetData(String, Object)

Stocke un objet donné dans le contexte d'appel logique et l'associe au nom spécifié.

MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
SetData(String, Object)

Stocke un objet donné et l'associe au nom spécifié.

SetHeaders(Header[])

Définit les en-têtes envoyés avec l'appel de méthode.

ToString()

Retourne une chaîne qui représente l'objet actuel.

(Hérité de Object)

S’applique à

Voir aussi