CallContext Klass
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Innehåller en uppsättning egenskaper som bärs med körningskodsökvägen. Det går inte att ärva den här klassen.
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
- Arv
-
CallContext
- Attribut
Exempel
I följande kodexempel visas hur klassen används CallContext för att överföra huvudobjekt och identitetsobjekt till en fjärrplats för identifiering. Information om hur du visar koden för klassen LogicalCallContextData som används i det här exemplet finns i exemplet för ILogicalThreadAffinative gränssnittet. Information om hur du visar koden för klassen HelloServiceClass som används i det här exemplet finns i exemplet för GetData metoden. Information om hur du visar koden för den serverklass som används i det här exemplet finns i exemplet för RegisterActivatedServiceType klassen.
#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
Kommentarer
CallContext är ett specialiserat samlingsobjekt som liknar en lokal trådlagring för metodanrop och tillhandahåller datafack som är unika för varje logisk körningstråd. Platserna delas inte mellan samtalskontexter i andra logiska trådar. Objekt kan läggas till när de CallContext flyttas nedåt och säkerhetskopiera körningskodsökvägen och granskas av olika objekt längs sökvägen.
När ett fjärrmetodanrop görs till ett objekt i ett annat AppDomainCallContext genererar klassen en LogicalCallContext instans som färdas tillsammans med fjärranropet. Endast objekt som exponerar ILogicalThreadAffinative gränssnittet och lagras i CallContext sprids utanför AppDomain i en LogicalCallContext. Objekt som inte stöder det här gränssnittet överförs inte i LogicalCallContext instanser med fjärrmetodanrop.
Note
Alla metoder i CallContext är statiska och fungerar i anropskontexten i den aktuella Thread.
Note
Den här klassen gör ett länkbehov. En SecurityException utlöses om den omedelbara anroparen inte har infrastrukturbehörighet. Mer information finns i Länkkrav .
Egenskaper
| Name | Description |
|---|---|
| HostContext |
Hämtar eller anger den värdkontext som är associerad med den aktuella tråden. |
Metoder
| Name | Description |
|---|---|
| Equals(Object) |
Avgör om det angivna objektet är lika med det aktuella objektet. (Ärvd från Object) |
| FreeNamedDataSlot(String) |
Tömmer ett datafack med det angivna namnet. |
| GetData(String) |
Hämtar ett objekt med det angivna namnet från CallContext. |
| GetHashCode() |
Fungerar som standard-hash-funktion. (Ärvd från Object) |
| GetHeaders() |
Returnerar de rubriker som skickas tillsammans med metodanropet. |
| GetType() |
Hämtar den aktuella instansen Type . (Ärvd från Object) |
| LogicalGetData(String) |
Hämtar ett objekt med det angivna namnet från kontexten för logiskt anrop. |
| LogicalSetData(String, Object) |
Lagrar ett angivet objekt i den logiska anropskontexten och associerar det med det angivna namnet. |
| MemberwiseClone() |
Skapar en ytlig kopia av den aktuella Object. (Ärvd från Object) |
| SetData(String, Object) |
Lagrar ett angivet objekt och associerar det med det angivna namnet. |
| SetHeaders(Header[]) |
Anger de rubriker som skickas tillsammans med metodanropet. |
| ToString() |
Returnerar en sträng som representerar det aktuella objektet. (Ärvd från Object) |