CallContext Classe

Définition

Fournit un ensemble de propriétés qui sont effectuées avec le chemin du 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 pour l’identification. Pour afficher le code de la LogicalCallContextData classe utilisée dans cet exemple, consultez l’exemple de 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. Les objets peuvent être ajoutés au fur et à CallContext mesure qu’ils se déplacent vers le bas et sauvegardent le chemin du code d’exécution, et examinés par différents objets le long du chemin.

Lorsqu’un appel de méthode distante est effectué vers un objet dans un autre AppDomain, la CallContext classe génère une LogicalCallContext instance qui se déplace avec l’appel distant. Seuls les objets qui exposent l’interface ILogicalThreadAffinative et qui sont stockés dans le CallContext fichier sont propagés en dehors de l’interface AppDomain d’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 distants.

Note

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

Note

Cette classe fait une demande de lien. A SecurityException est levée si l’appelant immédiat n’a pas d’autorisation d’infrastructure.

Propriétés

Nom Description
HostContext

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

Méthodes

Nom Description
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 avec le nom spécifié.

GetData(String)

Récupère un objet portant le nom spécifié à partir du CallContext.

GetHashCode()

Sert 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 la Type de l’instance actuelle.

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

Récupère un objet portant 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 Objectactuel.

(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