CallContext Sınıf

Tanım

Yürütme kodu yolu ile taşınan bir özellik kümesi sağlar. Bu sınıf devralınamaz.

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
Devralma
CallContext
Öznitelikler

Örnekler

Aşağıdaki kod örneği, kimlik için Principal ve Identity Nesnelerini uzak bir konuma iletmek için sınıfının kullanımını CallContext gösterir. Bu örnekte kullanılan sınıfın LogicalCallContextData kodunu görüntülemek için arabirim örneğine ILogicalThreadAffinative bakın. Bu örnekte kullanılan sınıfın HelloServiceClass kodunu görüntülemek için yöntem örneğine GetData bakın. Bu örnekte kullanılan sunucu sınıfının kodunu görüntülemek için sınıfın örneğine RegisterActivatedServiceType bakın.

#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

Açıklamalar

CallContext , yöntem çağrıları için İş Parçacığı Yerel Depolama'ya benzer özel bir koleksiyon nesnesidir ve her mantıksal yürütme iş parçacığı için benzersiz veri yuvaları sağlar. Yuvalar diğer mantıksal iş parçacıklarındaki çağrı bağlamları arasında paylaşılmaz. Nesneler, aşağı inip yürütme kodu yolunu yedeklerken öğesine eklenebilir CallContext ve yol boyunca çeşitli nesneler tarafından incelenebilir.

Başka AppDomainCallContext bir içindeki bir nesneye uzak yöntem çağrısı yapıldığında sınıf, uzak çağrıyla birlikte hareket eden bir LogicalCallContext örnek oluşturur. Yalnızca arabirimini ILogicalThreadAffinative kullanıma sunan ve içinde CallContext depolanan nesneler içindeki LogicalCallContextöğesinin AppDomain dışına yayılır. Bu arabirimi desteklemeyen nesneler uzak yöntem çağrılarına sahip örneklerde LogicalCallContext iletilmez.

Not

içindeki CallContext tüm yöntemler statiktir ve geçerli Threadiçindeki çağrı bağlamı üzerinde çalışır.

Not

Bu sınıf bir bağlantı talebi oluşturur. Hemen çağıranın altyapı izni yoksa oluşturulur SecurityException . Daha fazla bilgi için bkz. Bağlantı Talepleri .

Özellikler

HostContext

Geçerli iş parçacığıyla ilişkili konak bağlamını alır veya ayarlar.

Yöntemler

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
FreeNamedDataSlot(String)

Belirtilen ada sahip bir veri yuvasını boşaltın.

GetData(String)

öğesinden CallContextbelirtilen ada sahip bir nesne alır.

GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetHeaders()

Yöntem çağrısıyla birlikte gönderilen üst bilgileri döndürür.

GetType()

Type Geçerli örneğini alır.

(Devralındığı yer: Object)
LogicalGetData(String)

Mantıksal çağrı bağlamından belirtilen ada sahip bir nesne alır.

LogicalSetData(String, Object)

Belirli bir nesneyi mantıksal çağrı bağlamında depolar ve belirtilen adla ilişkilendirir.

MemberwiseClone()

Geçerli Objectöğesinin sığ bir kopyasını oluşturur.

(Devralındığı yer: Object)
SetData(String, Object)

Belirli bir nesneyi depolar ve belirtilen adla ilişkilendirir.

SetHeaders(Header[])

Yöntem çağrısıyla birlikte gönderilen üst bilgileri ayarlar.

ToString()

Geçerli nesneyi temsil eden dizeyi döndürür.

(Devralındığı yer: Object)

Şunlara uygulanır

Ayrıca bkz.