CallContext Kelas
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Menyediakan sekumpulan properti yang dibawa dengan jalur kode eksekusi. Kelas ini tidak dapat diwariskan.
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
- Warisan
-
CallContext
- Atribut
Contoh
Contoh kode berikut menunjukkan penggunaan CallContext kelas untuk mengirimkan Objek Utama dan Identitas ke lokasi jarak jauh untuk identifikasi. Untuk melihat kode untuk kelas yang LogicalCallContextData
digunakan dalam sampel ini, lihat contoh antarmuka ILogicalThreadAffinative . Untuk melihat kode untuk kelas yang HelloServiceClass
digunakan dalam sampel ini, lihat contoh untuk metode .GetData Untuk melihat kode untuk kelas server yang digunakan dalam sampel ini, lihat contoh untuk RegisterActivatedServiceType kelas .
#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
Keterangan
CallContext adalah objek koleksi khusus yang mirip dengan Thread Local Storage untuk panggilan metode dan menyediakan slot data yang unik untuk setiap utas eksekusi logis. Slot tidak dibagikan di seluruh konteks panggilan pada utas logis lainnya. Objek dapat ditambahkan ke CallContext saat berjalan ke bawah dan mencadangkan jalur kode eksekusi, dan diperiksa oleh berbagai objek di sepanjang jalur.
Ketika panggilan metode jarak jauh dilakukan ke objek di objek lain AppDomain, CallContext kelas menghasilkan instans LogicalCallContext yang melakukan perjalanan bersama dengan panggilan jarak jauh. Hanya objek yang mengekspos ILogicalThreadAffinative antarmuka dan disimpan dalam yang disebarluaskan CallContext di luar AppDomain dalam LogicalCallContext. Objek yang tidak mendukung antarmuka ini tidak ditransmisikan dalam LogicalCallContext instans dengan panggilan metode jarak jauh.
Catatan
Semua metode dalam CallContext bersifat statis dan beroperasi pada konteks panggilan di saat ini Thread.
Catatan
Kelas ini membuat permintaan tautan. SecurityException
akan dilemparkan jika penelepon langsung tidak memiliki izin infrastruktur. Lihat Permintaan Tautan untuk informasi selengkapnya.
Properti
HostContext |
Mendapatkan atau mengatur konteks host yang terkait dengan utas saat ini. |
Metode
Equals(Object) |
Menentukan apakah objek yang ditentukan sama dengan objek saat ini. (Diperoleh dari Object) |
FreeNamedDataSlot(String) |
Menginisiasi slot data dengan nama yang ditentukan. |
GetData(String) |
Mengambil objek dengan nama yang ditentukan dari CallContext. |
GetHashCode() |
Berfungsi sebagai fungsi hash default. (Diperoleh dari Object) |
GetHeaders() |
Mengembalikan header yang dikirim bersama dengan panggilan metode. |
GetType() |
Mendapatkan instans Type saat ini. (Diperoleh dari Object) |
LogicalGetData(String) |
Mengambil objek dengan nama yang ditentukan dari konteks panggilan logis. |
LogicalSetData(String, Object) |
Menyimpan objek tertentu dalam konteks panggilan logis dan mengaitkannya dengan nama yang ditentukan. |
MemberwiseClone() |
Membuat salinan dangkal dari yang saat ini Object. (Diperoleh dari Object) |
SetData(String, Object) |
Menyimpan objek tertentu dan mengaitkannya dengan nama yang ditentukan. |
SetHeaders(Header[]) |
Mengatur header yang dikirim bersama dengan panggilan metode. |
ToString() |
Mengembalikan string yang mewakili objek saat ini. (Diperoleh dari Object) |