CallContext Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Poskytuje sadu vlastností, které jsou přenášeny s cestou spouštěcího kódu. Tato třída se nemůže dědit.
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
- Dědičnost
-
CallContext
- Atributy
Příklady
Následující příklad kódu ukazuje použití CallContext třídy k přenosu objektů principal a identity do vzdáleného umístění pro identifikaci. Pokud chcete zobrazit kód pro třídu použitou LogicalCallContextData
v této ukázce, podívejte se na příklad rozhraní ILogicalThreadAffinative . Pokud chcete zobrazit kód pro třídu použitou HelloServiceClass
v této ukázce, podívejte se na příklad metody GetData . Pokud chcete zobrazit kód pro serverovou třídu použitou v této ukázce, podívejte se na příklad pro RegisterActivatedServiceType třídu.
#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
Poznámky
CallContext je specializovaný objekt kolekce podobný vláknu Místní úložiště pro volání metody a poskytuje sloty dat, které jsou jedinečné pro každé logické vlákno spuštění. Sloty nejsou sdíleny napříč kontexty volání v jiných logických vláknech. Objekty lze přidávat do objektu CallContext , který se pohybuje dolů a zálohuje cestou ke spouštěcímu kódu, a zkoumat různé objekty podél cesty.
Když vzdálené volání metody je provedeno na objekt v jiném AppDomain, CallContext třída vygeneruje LogicalCallContext instanci, která cestuje spolu se vzdáleným voláním. Pouze objekty, které zpřístupňují ILogicalThreadAffinative rozhraní a jsou uloženy v objektu CallContextAppDomain , se šíří mimo objekt v objektu LogicalCallContext. Objekty, které nepodporují toto rozhraní, nejsou přenášeny v LogicalCallContext instancích s voláním vzdálené metody.
Poznámka
Všechny metody v nástroji CallContext jsou statické a pracují s kontextem volání v aktuálním Threadobjektu .
Poznámka
Tato třída vyžaduje propojení. Vyvolá SecurityException
se, pokud bezprostřední volající nemá oprávnění k infrastruktuře. Další informace najdete v tématu Požadavky na propojení .
Vlastnosti
HostContext |
Získá nebo nastaví kontext hostitele přidružené k aktuálnímu vláknu. |
Metody
Equals(Object) |
Určí, zda se zadaný objekt rovná aktuálnímu objektu. (Zděděno od Object) |
FreeNamedDataSlot(String) |
Vyprázdní datový slot se zadaným názvem. |
GetData(String) |
Načte objekt se zadaným názvem z objektu CallContext. |
GetHashCode() |
Slouží jako výchozí hashovací funkce. (Zděděno od Object) |
GetHeaders() |
Vrátí hlavičky, které jsou odeslány spolu s voláním metody. |
GetType() |
Získá aktuální Type instanci. (Zděděno od Object) |
LogicalGetData(String) |
Načte objekt se zadaným názvem z kontextu logického volání. |
LogicalSetData(String, Object) |
Uloží daný objekt v kontextu logického volání a přidruží ho k zadanému názvu. |
MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Objectsouboru . (Zděděno od Object) |
SetData(String, Object) |
Uloží daný objekt a přidruží ho k zadanému názvu. |
SetHeaders(Header[]) |
Nastaví hlavičky, které se odesílají spolu s voláním metody. |
ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |