CallContext Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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) |