Udostępnij za pośrednictwem


CallContext Klasa

Definicja

Zawiera zestaw właściwości, które są przenoszone ze ścieżką kodu wykonywania. Klasa ta nie może być dziedziczona.

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
Dziedziczenie
CallContext
Atrybuty

Przykłady

Poniższy przykład kodu przedstawia użycie CallContext klasy do przesyłania obiektów principal i Identity do lokalizacji zdalnej na potrzeby identyfikacji. Aby wyświetlić kod dla klasy używanej LogicalCallContextData w tym przykładzie, zobacz przykład interfejsu ILogicalThreadAffinative . Aby wyświetlić kod dla klasy używanej HelloServiceClass w tym przykładzie, zobacz przykład GetData metody . Aby wyświetlić kod dla klasy serwera używanej w tym przykładzie, zobacz przykład dla RegisterActivatedServiceType klasy .

#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

Uwagi

CallContext to wyspecjalizowany obiekt kolekcji podobny do magazynu lokalnego wątku dla wywołań metod i udostępnia miejsca danych, które są unikatowe dla każdego logicznego wątku wykonywania. Miejsca nie są współużytkowane w kontekstach wywołań w innych wątkach logicznych. Obiekty można dodawać do CallContext obiektu w miarę przechodzenia w dół i tworzenia kopii zapasowej ścieżki kodu wykonywania oraz analizowanych przez różne obiekty wzdłuż ścieżki.

Gdy zdalne wywołanie metody jest wykonywane do obiektu w innym AppDomainobiekcie , CallContext klasa generuje LogicalCallContext wystąpienie, które jest przesyłane wraz z wywołaniem zdalnym. Tylko obiekty, które uwidaczniają ILogicalThreadAffinative interfejs i są przechowywane w obiekcie CallContext , są propagowane poza obiektem AppDomain w obiekcie LogicalCallContext. Obiekty, które nie obsługują tego interfejsu, nie są przesyłane w LogicalCallContext wystąpieniach za pomocą zdalnych wywołań metod.

Uwaga

Wszystkie metody w programie CallContext są statyczne i działają w kontekście wywołania w bieżącym elemencie Thread.

Uwaga

Ta klasa sprawia, że zapotrzebowanie na łącza. Obiekt SecurityException jest zgłaszany, jeśli bezpośredni obiekt wywołujący nie ma uprawnień do infrastruktury. Aby uzyskać więcej informacji, zobacz Link Demands (Żądania linków ).

Właściwości

HostContext

Pobiera lub ustawia kontekst hosta skojarzony z bieżącym wątkiem.

Metody

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
FreeNamedDataSlot(String)

Opróżnia miejsce danych o określonej nazwie.

GetData(String)

Pobiera obiekt o określonej nazwie z obiektu CallContext.

GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetHeaders()

Zwraca nagłówki, które są wysyłane wraz z wywołaniem metody.

GetType()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
LogicalGetData(String)

Pobiera obiekt o określonej nazwie z kontekstu wywołania logicznego.

LogicalSetData(String, Object)

Przechowuje dany obiekt w kontekście wywołania logicznego i kojarzy go z określoną nazwą.

MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
SetData(String, Object)

Przechowuje dany obiekt i kojarzy go z określoną nazwą.

SetHeaders(Header[])

Ustawia nagłówki, które są wysyłane wraz z wywołaniem metody.

ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Dotyczy

Zobacz też