CallContext Osztály

Definíció

A végrehajtási kód elérési útjával együtt hordozott tulajdonságok készletét biztosítja. Ez az osztály nem örökölhető.

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
Öröklődés
CallContext
Attribútumok

Példák

Az alábbi példakód azt mutatja be, hogy az osztály használatával továbbítja az CallContextegyszerű és identitásobjektumokat egy távoli helyre azonosítás céljából. Az ebben a mintában használt osztály kódjának LogicalCallContextData megtekintéséhez tekintse meg az interfész példáját ILogicalThreadAffinative . A mintában használt osztály kódjának HelloServiceClass megtekintéséhez tekintse meg a metódus példáját GetData . Az ebben a mintában használt kiszolgálóosztály kódjának megtekintéséhez tekintse meg az osztály példáját 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

Megjegyzések

CallContext A metódushívásokhoz a Thread Local Storage-hoz hasonló speciális gyűjteményobjektum, és olyan adathelyeket biztosít, amelyek egyediek az egyes logikai végrehajtási szálakhoz. A pontok nincsenek megosztva más logikai szálak híváskörnyezetei között. Az objektumok hozzáadhatók a CallContext végrehajtási kód elérési útjának le- és biztonsági mentéséhez, és az útvonal különböző objektumai által megvizsgálhatók.

Ha egy másik AppDomainobjektumhoz távoli metódushívást kezdeményeznek, az CallContext osztály létrehoz egy példányt LogicalCallContext , amely a távoli hívással együtt utazik. Csak azokat az objektumokat propagálja a rendszer, amelyek elérhetővé teszik az ILogicalThreadAffinative interfésztLogicalCallContext, és amelyek a CallContext tárolóban vannak tárolva.AppDomain Az interfészt nem támogató objektumokat a rendszer nem továbbítja LogicalCallContext távoli metódushívásokkal rendelkező példányokban.

Note

Minden metódus CallContext statikus, és az aktuális Threadhíváskörnyezetben működik.

Note

Ez az osztály hivatkozásigényt biztosít. A SecurityException akkor lesz aktiválva, ha az azonnali hívó nem rendelkezik infrastruktúra-engedéllyel. További információkért lásd a Hivatkozási igények című témakört.

Tulajdonságok

Name Description
HostContext

Lekéri vagy beállítja az aktuális szálhoz társított gazdagépkörnyezetet.

Metódusok

Name Description
Equals(Object)

Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal.

(Öröklődés forrása Object)
FreeNamedDataSlot(String)

Kiürít egy adathelyet a megadott névvel.

GetData(String)

Lekéri a megadott nevű objektumot a CallContext.

GetHashCode()

Ez az alapértelmezett kivonatoló függvény.

(Öröklődés forrása Object)
GetHeaders()

A metódushívással együtt elküldött fejléceket adja vissza.

GetType()

Lekéri az Type aktuális példányt.

(Öröklődés forrása Object)
LogicalGetData(String)

Lekéri a megadott nevű objektumot a logikai hívási környezetből.

LogicalSetData(String, Object)

Egy adott objektumot a logikai hívás kontextusában tárol, és a megadott névvel társítja.

MemberwiseClone()

Az aktuális Objectpéldány sekély másolatát hozza létre.

(Öröklődés forrása Object)
SetData(String, Object)

Egy adott objektumot tárol, és társítja a megadott névvel.

SetHeaders(Header[])

Beállítja a metódushívással együtt elküldött fejléceket.

ToString()

Az aktuális objektumot jelképező sztringet ad vissza.

(Öröklődés forrása Object)

A következőre érvényes:

Lásd még