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, Sorumlu ve Kimlik Nesnelerini tanımlama için 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önteminin ö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, yürütme kodu yolunu aşağı ve 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çinde LogicalCallContextöğesinin AppDomain dışına yayılır. Bu arabirimi desteklemeyen nesneler uzak yöntem çağrılarına sahip örneklerde LogicalCallContext iletilmez.

Note

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

Note

Bu sınıf bir bağlantı talebi oluşturur. Hemen çağıranın altyapı izni yoksa bir SecurityException oluşturulur.

Özellikler

Name Description
HostContext

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

Yöntemler

Name Description
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()

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

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

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

LogicalSetData(String, Object)

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

MemberwiseClone()

Geçerli Objectbasit 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 bir dize döndürür.

(Devralındığı yer: Object)

Şunlara uygulanır

Ayrıca bkz.