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é se přenášejí s cestou kódu provádění. Tuto třídu nelze zdě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ů zabezpečení 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 GetData metody. Pokud chcete zobrazit kód pro třídu serveru použitou v této ukázce, podívejte se na příklad třídy RegisterActivatedServiceType .
#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 datové sloty, které jsou jedinečné pro každé logické vlákno spuštění. Sloty se nesdílí napříč kontexty volání v jiných logických vláknech. Objekty je možné přidat do CallContext cesty dolů a zálohovat cestu kódu provádění a prozkoumat různé objekty podél cesty.
Když je volání vzdálené metody provedeno na objekt v jiném AppDomain, CallContext třída generuje 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 CallContext , jsou šířené mimo AppDomain objekt v objektu LogicalCallContext. Objekty, které nepodporují toto rozhraní, nejsou přenášeny v LogicalCallContext instancích s voláními vzdálené metody.
Note
Všechny metody jsou CallContext statické a pracují s kontextem volání v aktuálním Thread.
Note
Tato třída vytváří poptávku po propojení. Vyvolá SecurityException se, pokud bezprostřední volající nemá oprávnění k infrastruktuře.
Vlastnosti
| Name | Description |
|---|---|
| HostContext |
Získá nebo nastaví kontext hostitele přidružený k aktuálnímu vláknu. |
Metody
| Name | Description |
|---|---|
| Equals(Object) |
Určuje, zda je zadaný objekt roven 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í funkce hash. (Zděděno od Object) |
| GetHeaders() |
Vrátí hlavičky, které jsou odeslány spolu s voláním metody. |
| GetType() |
Získá Type aktuální instance. (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 Object. (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) |