RealProxy 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
프록시에 대한 기본 기능을 제공합니다.
public ref class RealProxy abstract
public abstract class RealProxy
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class RealProxy
[System.Runtime.InteropServices.ComVisible(true)]
[System.Security.SecurityCritical]
public abstract class RealProxy
type RealProxy = class
[<System.Runtime.InteropServices.ComVisible(true)>]
type RealProxy = class
[<System.Runtime.InteropServices.ComVisible(true)>]
[<System.Security.SecurityCritical>]
type RealProxy = class
Public MustInherit Class RealProxy
- 상속
-
RealProxy
- 특성
예제
// Create a custom 'RealProxy'.
public ref class MyProxy: public RealProxy
{
private:
String^ myURIString;
MarshalByRefObject^ myMarshalByRefObject;
public:
MyProxy( Type^ myType )
: RealProxy( myType )
{
// RealProxy uses the Type to generate a transparent proxy.
myMarshalByRefObject = dynamic_cast<MarshalByRefObject^>(Activator::CreateInstance(myType));
// Get 'ObjRef', for transmission serialization between application domains.
ObjRef^ myObjRef = RemotingServices::Marshal( myMarshalByRefObject );
// Get the 'URI' property of 'ObjRef' and store it.
myURIString = myObjRef->URI;
Console::WriteLine( "URI :{0}", myObjRef->URI );
}
virtual IMessage^ Invoke ( IMessage^ myIMessage ) override
{
Console::WriteLine( "MyProxy.Invoke Start" );
Console::WriteLine( "" );
if ( dynamic_cast<IMethodCallMessage^>(myIMessage) )
Console::WriteLine( "IMethodCallMessage" );
if ( dynamic_cast<IMethodReturnMessage^>(myIMessage) )
Console::WriteLine( "IMethodReturnMessage" );
Type^ msgType = myIMessage->GetType();
Console::WriteLine( "Message Type: {0}", msgType );
Console::WriteLine( "Message Properties" );
IDictionary^ myIDictionary = myIMessage->Properties;
// Set the '__Uri' property of 'IMessage' to 'URI' property of 'ObjRef'.
myIDictionary->default[ "__Uri" ] = myURIString;
IDictionaryEnumerator^ myIDictionaryEnumerator = dynamic_cast<IDictionaryEnumerator^>(myIDictionary->GetEnumerator());
while ( myIDictionaryEnumerator->MoveNext() )
{
Object^ myKey = myIDictionaryEnumerator->Key;
String^ myKeyName = myKey->ToString();
Object^ myValue = myIDictionaryEnumerator->Value;
Console::WriteLine( "\t{0} : {1}", myKeyName, myIDictionaryEnumerator->Value );
if ( myKeyName->Equals( "__Args" ) )
{
array<Object^>^myObjectArray = (array<Object^>^)myValue;
for ( int aIndex = 0; aIndex < myObjectArray->Length; aIndex++ )
Console::WriteLine( "\t\targ: {0} myValue: {1}", aIndex, myObjectArray[ aIndex ] );
}
if ( (myKeyName->Equals( "__MethodSignature" )) && (nullptr != myValue) )
{
array<Object^>^myObjectArray = (array<Object^>^)myValue;
for ( int aIndex = 0; aIndex < myObjectArray->Length; aIndex++ )
Console::WriteLine( "\t\targ: {0} myValue: {1}", aIndex, myObjectArray[ aIndex ] );
}
}
IMessage^ myReturnMessage;
myIDictionary->default[ "__Uri" ] = myURIString;
Console::WriteLine( "__Uri {0}", myIDictionary->default[ "__Uri" ] );
Console::WriteLine( "ChannelServices.SyncDispatchMessage" );
myReturnMessage = ChannelServices::SyncDispatchMessage( myIMessage );
// Push return value and OUT parameters back onto stack.
IMethodReturnMessage^ myMethodReturnMessage = dynamic_cast<IMethodReturnMessage^>(myReturnMessage);
Console::WriteLine( "IMethodReturnMessage.ReturnValue: {0}", myMethodReturnMessage->ReturnValue );
Console::WriteLine( "MyProxy.Invoke - Finish" );
return myReturnMessage;
}
};
// Create a custom 'RealProxy'.
public class MyProxy : RealProxy
{
String myURIString;
MarshalByRefObject myMarshalByRefObject;
public MyProxy(Type myType) : base(myType)
{
// RealProxy uses the Type to generate a transparent proxy.
myMarshalByRefObject = (MarshalByRefObject)Activator.CreateInstance((myType));
// Get 'ObjRef', for transmission serialization between application domains.
ObjRef myObjRef = RemotingServices.Marshal(myMarshalByRefObject);
// Get the 'URI' property of 'ObjRef' and store it.
myURIString = myObjRef.URI;
Console.WriteLine("URI :{0}", myObjRef.URI);
}
public override IMessage Invoke(IMessage myIMessage)
{
Console.WriteLine("MyProxy.Invoke Start");
Console.WriteLine("");
if (myIMessage is IMethodCallMessage)
Console.WriteLine("IMethodCallMessage");
if (myIMessage is IMethodReturnMessage)
Console.WriteLine("IMethodReturnMessage");
Type msgType = myIMessage.GetType();
Console.WriteLine("Message Type: {0}", msgType.ToString());
Console.WriteLine("Message Properties");
IDictionary myIDictionary = myIMessage.Properties;
// Set the '__Uri' property of 'IMessage' to 'URI' property of 'ObjRef'.
myIDictionary["__Uri"] = myURIString;
IDictionaryEnumerator myIDictionaryEnumerator =
(IDictionaryEnumerator) myIDictionary.GetEnumerator();
while (myIDictionaryEnumerator.MoveNext())
{
Object myKey = myIDictionaryEnumerator.Key;
String myKeyName = myKey.ToString();
Object myValue = myIDictionaryEnumerator.Value;
Console.WriteLine("\t{0} : {1}", myKeyName,
myIDictionaryEnumerator.Value);
if (myKeyName == "__Args")
{
Object[] myObjectArray = (Object[])myValue;
for (int aIndex = 0; aIndex < myObjectArray.Length; aIndex++)
Console.WriteLine("\t\targ: {0} myValue: {1}", aIndex,
myObjectArray[aIndex]);
}
if ((myKeyName == "__MethodSignature") && (null != myValue))
{
Object[] myObjectArray = (Object[])myValue;
for (int aIndex = 0; aIndex < myObjectArray.Length; aIndex++)
Console.WriteLine("\t\targ: {0} myValue: {1}", aIndex,
myObjectArray[aIndex]);
}
}
IMessage myReturnMessage;
myIDictionary["__Uri"] = myURIString;
Console.WriteLine("__Uri {0}", myIDictionary["__Uri"]);
Console.WriteLine("ChannelServices.SyncDispatchMessage");
myReturnMessage = ChannelServices.SyncDispatchMessage(myIMessage);
// Push return value and OUT parameters back onto stack.
IMethodReturnMessage myMethodReturnMessage = (IMethodReturnMessage)
myReturnMessage;
Console.WriteLine("IMethodReturnMessage.ReturnValue: {0}",
myMethodReturnMessage.ReturnValue);
Console.WriteLine("MyProxy.Invoke - Finish");
return myReturnMessage;
}
}
' Create a custom 'RealProxy'.
Public Class MyProxy
Inherits RealProxy
Private myURIString As String
Private myMarshalByRefObject As MarshalByRefObject
<PermissionSet(SecurityAction.LinkDemand)> _
Public Sub New(ByVal myType As Type)
MyBase.New(myType)
' RealProxy uses the Type to generate a transparent proxy.
myMarshalByRefObject = CType(Activator.CreateInstance(myType), MarshalByRefObject)
' Get 'ObjRef', for transmission serialization between application domains.
Dim myObjRef As ObjRef = RemotingServices.Marshal(myMarshalByRefObject)
' Get the 'URI' property of 'ObjRef' and store it.
myURIString = myObjRef.URI
Console.WriteLine("URI :{0}", myObjRef.URI)
End Sub
<SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags:=SecurityPermissionFlag.Infrastructure)> _
Public Overrides Function Invoke(ByVal myIMessage As IMessage) As IMessage
Console.WriteLine("MyProxy.Invoke Start")
Console.WriteLine("")
If TypeOf myIMessage Is IMethodCallMessage Then
Console.WriteLine("IMethodCallMessage")
End If
If TypeOf myIMessage Is IMethodReturnMessage Then
Console.WriteLine("IMethodReturnMessage")
End If
Dim msgType As Type
msgType = CObj(myIMessage).GetType
Console.WriteLine("Message Type: {0}", msgType.ToString())
Console.WriteLine("Message Properties")
Dim myIDictionary As IDictionary = myIMessage.Properties
' Set the '__Uri' property of 'IMessage' to 'URI' property of 'ObjRef'.
myIDictionary("__Uri") = myURIString
Dim myIDictionaryEnumerator As IDictionaryEnumerator = CType(myIDictionary.GetEnumerator(), _
IDictionaryEnumerator)
While myIDictionaryEnumerator.MoveNext()
Dim myKey As Object = myIDictionaryEnumerator.Key
Dim myKeyName As String = myKey.ToString()
Dim myValue As Object = myIDictionaryEnumerator.Value
Console.WriteLine(ControlChars.Tab + "{0} : {1}", myKeyName, myIDictionaryEnumerator.Value)
If myKeyName = "__Args" Then
Dim myObjectArray As Object() = CType(myValue, Object())
Dim aIndex As Integer
For aIndex = 0 To myObjectArray.Length - 1
Console.WriteLine(ControlChars.Tab + ControlChars.Tab + "arg: {0} myValue: {1}", _
aIndex, myObjectArray(aIndex))
Next aIndex
End If
If myKeyName = "__MethodSignature" And Not Nothing Is myValue Then
Dim myObjectArray As Object() = CType(myValue, Object())
Dim aIndex As Integer
For aIndex = 0 To myObjectArray.Length - 1
Console.WriteLine(ControlChars.Tab + ControlChars.Tab + "arg: {0} myValue: {1}", _
aIndex, myObjectArray(aIndex))
Next aIndex
End If
End While
Dim myReturnMessage As IMessage
myIDictionary("__Uri") = myURIString
Console.WriteLine("__Uri {0}", myIDictionary("__Uri"))
Console.WriteLine("ChannelServices.SyncDispatchMessage")
myReturnMessage = ChannelServices.SyncDispatchMessage(CObj(myIMessage))
' Push return value and OUT parameters back onto stack.
Dim myMethodReturnMessage As IMethodReturnMessage = CType(myReturnMessage, IMethodReturnMessage)
Console.WriteLine("IMethodReturnMessage.ReturnValue: {0}", myMethodReturnMessage.ReturnValue)
Console.WriteLine("MyProxy.Invoke - Finish")
Return myReturnMessage
End Function 'Invoke
End Class
설명
RealProxy 클래스는 프록시가 abstract 파생되어야 하는 기본 클래스입니다.
원격 경계의 모든 종류에서 개체를 사용하는 클라이언트는 실제로 개체에 대해 투명한 프록시를 사용합니다. 투명 프록시는 실제 개체가 클라이언트의 공간에 있다는 환상을 제공합니다. 원격 인프라를 사용하여 실제 개체에 호출을 전달하여 이를 달성합니다.
투명 프록시 자체는 관리되는 런타임 클래스 형식 RealProxy의 인스턴스에 의해 저장됩니다. 투명 RealProxy 프록시에서 작업을 전달하는 데 필요한 기능의 일부를 구현합니다. 프록시 개체는 가비지 수집, 필드 및 메서드 지원과 같은 관리되는 개체의 관련 의미 체계를 상속하며 새 클래스를 형성하도록 확장할 수 있습니다. 프록시에는 이중 특성이 있습니다. 즉, 원격 개체(투명 프록시)와 동일한 클래스의 개체 역할을 하며 관리되는 개체 자체입니다.
프록시 개체는 내의 원격 세분화 AppDomain와 관계없이 사용할 수 있습니다.
메모
이 클래스는 클래스 수준에서 링크 요청 및 상속 요청을 만듭니다. 직접 호출자 또는 파생 클래스에 인프라 권한이 없는 경우 A SecurityException 가 throw됩니다.
구현자 참고
상속할 RealProxy때 메서드를 재정의 Invoke(IMessage) 해야 합니다.
생성자
| Name | Description |
|---|---|
| RealProxy() |
기본값을 사용하여 클래스의 새 인스턴스를 RealProxy 초기화합니다. |
| RealProxy(Type, IntPtr, Object) |
RealProxy 클래스의 새 인스턴스를 초기화합니다. |
| RealProxy(Type) |
메서드
| Name | Description |
|---|---|
| AttachServer(MarshalByRefObject) |
현재 프록시 인스턴스를 지정된 원격 MarshalByRefObject에 연결합니다. |
| CreateObjRef(Type) |
ObjRef 지정된 개체 형식에 대한 개체를 만들고 원격 인프라에 클라이언트 활성화 개체로 등록합니다. |
| DetachServer() |
현재 프록시 인스턴스를 나타내는 원격 서버 개체에서 분리합니다. |
| Equals(Object) |
지정한 개체와 현재 개체가 같은지 여부를 확인합니다. (다음에서 상속됨 Object) |
| GetCOMIUnknown(Boolean) |
현재 프록시 인스턴스가 나타내는 개체에 대한 관리되지 않는 참조를 요청합니다. |
| GetHashCode() |
기본 해시 함수로 작동합니다. (다음에서 상속됨 Object) |
| GetObjectData(SerializationInfo, StreamingContext) |
현재 인스턴스 RealProxy 가 나타내는 개체의 투명 프록시를 지정된 개체에 추가합니다 SerializationInfo. |
| GetProxiedType() | |
| GetStubData(RealProxy) |
지정된 프록시에 대해 저장된 스텁 데이터를 검색합니다. |
| GetTransparentProxy() |
현재 인스턴스에 대한 투명 프록시를 반환합니다 RealProxy. |
| GetType() |
현재 인스턴스의 Type 가져옵니다. (다음에서 상속됨 Object) |
| GetUnwrappedServer() |
현재 프록시 인스턴스가 나타내는 서버 개체를 반환합니다. |
| InitializeServerObject(IConstructionCallMessage) |
현재 인스턴스 Type 가 지정된 RealProxy개체와 함께 나타내는 원격 개체 개체의 IConstructionCallMessage 새 인스턴스를 초기화합니다. |
| Invoke(IMessage) |
파생 클래스에서 재정의되는 경우 현재 인스턴스가 나타내는 원격 개체에 제공된 IMessage 메서드를 호출합니다. |
| MemberwiseClone() |
현재 Object단순 복사본을 만듭니다. (다음에서 상속됨 Object) |
| SetCOMIUnknown(IntPtr) |
현재 인스턴스가 나타내는 개체의 관리되지 않는 프록시를 저장합니다. |
| SetStubData(RealProxy, Object) |
지정된 프록시에 대한 스텁 데이터를 설정합니다. |
| SupportsInterface(Guid) |
지정된 ID를 사용하여 COM 인터페이스를 요청합니다. |
| ToString() |
현재 개체를 나타내는 문자열을 반환합니다. (다음에서 상속됨 Object) |