CallContext Klas
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Biedt een set eigenschappen die worden meegenomen met het uitvoeringscodepad. Deze klasse kan niet worden overgenomen.
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
- Overname
-
CallContext
- Kenmerken
Voorbeelden
In het volgende codevoorbeeld ziet u het gebruik van de klasse voor het CallContext verzenden van principal- en identiteitsobjecten naar een externe locatie voor identificatie. Zie het voorbeeld voor de ILogicalThreadAffinative interface om de code weer te geven voor de LogicalCallContextData klasse die in dit voorbeeld wordt gebruikt. Zie het voorbeeld voor de GetData methode om de code weer te geven voor de HelloServiceClass klasse die in dit voorbeeld wordt gebruikt. Als u de code voor de serverklasse wilt weergeven die in dit voorbeeld wordt gebruikt, raadpleegt u het voorbeeld voor de RegisterActivatedServiceType klasse.
#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
Opmerkingen
CallContext is een gespecialiseerd verzamelingsobject dat vergelijkbaar is met een Thread Local Storage voor methode-aanroepen en biedt gegevenssites die uniek zijn voor elke logische thread van uitvoering. De sites worden niet gedeeld tussen oproepcontexten op andere logische threads. Objecten kunnen worden toegevoegd aan het CallContext object terwijl deze omlaag gaat en een back-up van het uitvoeringscodepad maakt en door verschillende objecten langs het pad wordt onderzocht.
Wanneer een aanroep van een externe methode wordt gedaan naar een object in een ander AppDomainobject, genereert de CallContext klasse een LogicalCallContext exemplaar dat samen met de externe aanroep gaat. Alleen objecten die de ILogicalThreadAffinative interface beschikbaar maken en worden opgeslagen in de CallContext interface, worden buiten het AppDomain object in een LogicalCallContextdoorgegeven. Objecten die deze interface niet ondersteunen, worden niet verzonden in LogicalCallContext exemplaren met externe methode-aanroepen.
Note
Alle methoden zijn CallContext statisch en werken op de aanroepcontext in de huidige Thread.
Note
Deze klasse maakt een koppelingsvraag. Er wordt een SecurityException gegenereerd als de directe beller geen infrastructuurmachtiging heeft. Zie Koppelingsvereisten voor meer informatie.
Eigenschappen
| Name | Description |
|---|---|
| HostContext |
Hiermee wordt de hostcontext opgehaald of ingesteld die is gekoppeld aan de huidige thread. |
Methoden
| Name | Description |
|---|---|
| Equals(Object) |
Bepaalt of het opgegeven object gelijk is aan het huidige object. (Overgenomen van Object) |
| FreeNamedDataSlot(String) |
Hiermee wordt een gegevenssite leeg gemaakt met de opgegeven naam. |
| GetData(String) |
Hiermee wordt een object met de opgegeven naam opgehaald uit de CallContext. |
| GetHashCode() |
Fungeert als de standaardhashfunctie. (Overgenomen van Object) |
| GetHeaders() |
Retourneert de headers die samen met de methodeaanroep worden verzonden. |
| GetType() |
Hiermee haalt u de Type huidige instantie op. (Overgenomen van Object) |
| LogicalGetData(String) |
Hiermee haalt u een object met de opgegeven naam op uit de context van de logische aanroep. |
| LogicalSetData(String, Object) |
Slaat een bepaald object op in de context van de logische aanroep en koppelt het aan de opgegeven naam. |
| MemberwiseClone() |
Hiermee maakt u een ondiepe kopie van de huidige Object. (Overgenomen van Object) |
| SetData(String, Object) |
Slaat een bepaald object op en koppelt het aan de opgegeven naam. |
| SetHeaders(Header[]) |
Hiermee stelt u de headers in die samen met de methodeaanroep worden verzonden. |
| ToString() |
Retourneert een tekenreeks die het huidige object vertegenwoordigt. (Overgenomen van Object) |