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 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) |