CallContext 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
실행 코드 경로로 전달된 속성 집합을 제공합니다. 이 클래스는 상속될 수 없습니다.
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
- 상속
-
CallContext
- 특성
예제
다음 코드 예제에서는 클래스를 사용하여 CallContext보안 주체 및 ID 개체를 식별을 위해 원격 위치로 전송하는 방법을 보여 줍니다. 이 샘플에서 사용되는 클래스에 LogicalCallContextData
대한 코드를 보려면 인터페이스에 대한 예제를 ILogicalThreadAffinative 참조하세요. 이 샘플에서 사용되는 클래스에 HelloServiceClass
대한 코드를 보려면 메서드의 예제를 GetData 참조하세요. 이 샘플에서 사용되는 서버 클래스에 대한 코드를 보려면 클래스의 예제를 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
설명
CallContext은 메서드 호출을 위한 스레드 로컬 스토리지와 유사한 특수 컬렉션 개체이며 각 논리 스레드 실행에 고유한 데이터 슬롯을 제공합니다. 슬롯 논리 다른 스레드에서 호출 컨텍스트 간에 공유 되지 않습니다. 개체는 실행 코드 경로를 아래로 이동하고 백업할 때 에 추가하고 CallContext 경로를 따라 다양한 개체에서 검사할 수 있습니다.
다른 AppDomain의 개체에 대한 원격 메서드 호출이 수행되면 클래스는 CallContext 원격 호출과 함께 이동하는 instance 생성 LogicalCallContext 합니다. 개체만 해당 노출 합니다 ILogicalThreadAffinative 인터페이스와 저장 됩니다는 CallContext 전파 됩니다는 AppDomain 에서 LogicalCallContext. 이 인터페이스를 지원 하지 않는 개체에 전송 되지 않은 LogicalCallContext 원격 메서드 호출을 사용 하 여 인스턴스.
참고
의 CallContext 모든 메서드는 정적이며 현재 Thread의 호출 컨텍스트에서 작동합니다.
참고
이 클래스에는 링크 요청을 만듭니다. 즉시 호출자에게 인프라 권한이 없는 경우 이 SecurityException
throw됩니다. 참조 링크 요구가 자세한 내용은 합니다.
속성
HostContext |
현재 스레드와 연결된 호스트 컨텍스트를 가져오거나 설정합니다. |
메서드
Equals(Object) |
지정된 개체가 현재 개체와 같은지 확인합니다. (다음에서 상속됨 Object) |
FreeNamedDataSlot(String) |
지정한 이름을 가진 데이터 슬롯을 비웁니다. |
GetData(String) |
지정한 이름으로 CallContext에서 개체를 검색합니다. |
GetHashCode() |
기본 해시 함수로 작동합니다. (다음에서 상속됨 Object) |
GetHeaders() |
메서드 호출과 함께 보낸 헤더를 반환합니다. |
GetType() |
현재 인스턴스의 Type을 가져옵니다. (다음에서 상속됨 Object) |
LogicalGetData(String) |
논리 호출 컨텍스트에서 지정된 이름의 개체를 검색합니다. |
LogicalSetData(String, Object) |
지정된 개체를 논리 호출 컨텍스트에 저장하고 이를 지정한 이름에 연결합니다. |
MemberwiseClone() |
현재 Object의 단순 복사본을 만듭니다. (다음에서 상속됨 Object) |
SetData(String, Object) |
지정된 개체를 저장하고 이를 지정한 이름에 연결합니다. |
SetHeaders(Header[]) |
메서드 호출과 함께 보낸 헤더를 설정합니다. |
ToString() |
현재 개체를 나타내는 문자열을 반환합니다. (다음에서 상속됨 Object) |
적용 대상
추가 정보
.NET