CallContext Klas

Definitie

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)

Van toepassing op

Zie ook