RealProxy クラス
アセンブリ: mscorlib (mscorlib.dll 内)


RealProxy クラスは、プロキシの派生元である abstract 基本クラスです。
あらゆる種類のリモート処理の境界を越えてオブジェクトを使用するクライアントは、実際にはそのオブジェクトの透過プロキシを使用しています。透過プロキシは、実際のオブジェクトがクライアントの領域に格納されているように見せかけます。これは、リモート処理インフラストラクチャを使用して、自らに対する呼び出しを実際のオブジェクトに転送することによって実現されます。
透過プロキシ自体は、RealProxy 型のマネージ ランタイム クラスのインスタンスに格納されます。RealProxy は、透過プロキシから操作を転送するために必要な機能の一部を実装します。なお、プロキシ オブジェクトは、ガベージ コレクション、フィールドやメソッドのサポートなど、マネージ オブジェクトの関連付けられたセマンティクスを継承し、新しいクラスを形成するために拡張できます。プロキシは、リモート オブジェクト (透過プロキシ) と同じクラスのオブジェクトとして機能すると同時に、マネージ オブジェクトでもあるという二重の性質を持っています。
プロキシ オブジェクトは、AppDomain 内のリモート処理サブ区分を考慮せずに使用できます。
![]() |
---|
このクラスは、リンク確認要求と継承確認要求をクラス レベルで行います。直前の呼び出し元または派生クラスにインフラストラクチャ アクセス許可がない場合、SecurityException がスローされます。セキュリティ要求の詳細については、「リンク確認要求」および「継承確認要求」を参照してください。 |

' 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 'New <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 'MyProxy
// Create a custom 'RealProxy'. public class MyProxy : RealProxy { String myURIString; MarshalByRefObject myMarshalByRefObject; [PermissionSet(SecurityAction.LinkDemand)] 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); } [SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.Infrastructure)] 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'. /** @attribute SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.Infrastructure) */ public class MyProxy extends RealProxy { private String myURIString; private MarshalByRefObject myMarshalByRefObject; public MyProxy(Type myType) { super(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.get_URI(); Console.WriteLine("URI :{0}", myObjRef.get_URI()); } //MyProxy public IMessage Invoke(IMessage myIMessage) { Console.WriteLine("MyProxy.Invoke Start"); Console.WriteLine(""); if (myIMessage instanceof IMethodCallMessage) { Console.WriteLine("IMethodCallMessage"); } if (myIMessage instanceof IMethodReturnMessage) { Console.WriteLine("IMethodReturnMessage"); } Type msgType = myIMessage.GetType(); Console.WriteLine("Message Type: {0}", msgType.ToString()); Console.WriteLine("Message Properties"); IDictionary myIDictionary = myIMessage.get_Properties(); // Set the '__Uri' property of 'IMessage' to 'URI' property of 'ObjRef'. myIDictionary.set_Item("__Uri", myURIString); IDictionaryEnumerator myIDictionaryEnumerator = (IDictionaryEnumerator)(myIDictionary.GetEnumerator()); while (myIDictionaryEnumerator.MoveNext()) { Object myKey = myIDictionaryEnumerator.get_Key(); String myKeyName = myKey.ToString(); Object myValue = myIDictionaryEnumerator.get_Value(); Console.WriteLine("\t{0} : {1}", myKeyName, myIDictionaryEnumerator.get_Value()); if (myKeyName.Equals("__Args")) { Object myObjectArray[] = (Object[])myValue; for (int aIndex = 0; aIndex < myObjectArray.length; aIndex++) { Console.WriteLine("\t\targ: {0} myValue: {1}", (Int32)aIndex, myObjectArray.get_Item(aIndex)); } } if (myKeyName.Equals("__MethodSignature") && null != myValue) { Object myObjectArray[] = (Object[])myValue; for (int aIndex = 0; aIndex < myObjectArray.length; aIndex++) { Console.WriteLine("\t\targ: {0} myValue: {1}", (Int32)aIndex, myObjectArray.get_Item(aIndex)); } } } IMessage myReturnMessage; myIDictionary.set_Item("__Uri", myURIString); Console.WriteLine("__Uri {0}", myIDictionary.get_Item("__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.get_ReturnValue()); Console.WriteLine("MyProxy.Invoke - Finish"); return myReturnMessage; } //Invoke } //MyProxy


System.Runtime.Remoting.Proxies.RealProxy


Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


RealProxy コンストラクタ ()
アセンブリ: mscorlib (mscorlib.dll 内)


Imports System Imports System.Collections Imports System.Runtime.Serialization Imports System.Runtime.Remoting Imports System.Runtime.Remoting.Activation Imports System.Runtime.Remoting.Channels Imports System.Runtime.Remoting.Proxies Imports System.Runtime.Remoting.Messaging Imports System.Runtime.Remoting.Contexts Imports System.Security.Permissions Namespace Samples <SecurityPermissionAttribute(SecurityAction.Demand, Flags := SecurityPermissionFlag.Infrastructure), _ AttributeUsage(AttributeTargets.Class)> _ Public Class MyProxyAttribute Inherits ProxyAttribute Public Sub New() End Sub 'New ' Create an instance of ServicedComponentProxy Public Overrides Function CreateInstance(serverType As Type) As MarshalByRefObject Return MyBase.CreateInstance(serverType) End Function 'CreateInstance Public Overrides Function CreateProxy(objRef1 As ObjRef, serverType As Type, _ serverObject As Object, serverContext As Context) As RealProxy Dim myCustomProxy As New MyProxy(serverType) If Not (serverContext Is Nothing) Then RealProxy.SetStubData(myCustomProxy, serverContext) End If If Not serverType.IsMarshalByRef And serverContext Is Nothing Then Throw New RemotingException("Bad Type for CreateProxy") End If Return myCustomProxy End Function 'CreateProxy End Class 'MyProxyAttribute <MyProxyAttribute()> _ Public Class CustomServer Inherits ContextBoundObject Public Sub New() Console.WriteLine("CustomServer Base Class constructor called") End Sub 'New Public Sub HelloMethod(str As String) Console.WriteLine("HelloMethod of Server is invoked with message : " + str) End Sub 'HelloMethod End Class 'CustomServer <PermissionSet(SecurityAction.Demand, Name:="FullTrust")> _ Public Class MyProxy Inherits RealProxy Private myUri As String Private myMarshalByRefObject As MarshalByRefObject Public Sub New() MyBase.New() Console.WriteLine("MyProxy Constructor Called...") myMarshalByRefObject = _ CType(Activator.CreateInstance(GetType(CustomServer)), MarshalByRefObject) Dim myObjRef As ObjRef = RemotingServices.Marshal(myMarshalByRefObject) myUri = myObjRef.URI End Sub 'New Public Sub New(type1 As Type) MyBase.New(type1) Console.WriteLine("MyProxy Constructor Called...") myMarshalByRefObject = CType(Activator.CreateInstance(type1), MarshalByRefObject) Dim myObjRef As ObjRef = RemotingServices.Marshal(myMarshalByRefObject) myUri = myObjRef.URI End Sub 'New Public Sub New(type1 As Type, targetObject As MarshalByRefObject) MyBase.New(type1) Console.WriteLine("MyProxy Constructor Called...") myMarshalByRefObject = targetObject Dim myObjRef As ObjRef = RemotingServices.Marshal(myMarshalByRefObject) myUri = myObjRef.URI End Sub 'New Public Overrides Function Invoke(myMessage As IMessage) As IMessage Console.WriteLine("MyProxy 'Invoke method' Called...") If TypeOf myMessage Is IMethodCallMessage Then Console.WriteLine("IMethodCallMessage") End If If TypeOf myMessage Is IMethodReturnMessage Then Console.WriteLine("IMethodReturnMessage") End If If TypeOf myMessage Is IConstructionCallMessage Then ' Initialize a new instance of remote object Dim myIConstructionReturnMessage As IConstructionReturnMessage = _ Me.InitializeServerObject(CType(myMessage, IConstructionCallMessage)) Dim constructionResponse As _ New ConstructionResponse(Nothing, CType(myMessage, IMethodCallMessage)) Return constructionResponse End If Dim myIDictionary As IDictionary = myMessage.Properties Dim returnMessage As IMessage myIDictionary("__Uri") = myUri ' Synchronously dispatch messages to server. returnMessage = ChannelServices.SyncDispatchMessage(myMessage) ' Pushing return value and OUT parameters back onto stack. Dim myMethodReturnMessage As IMethodReturnMessage = _ CType(returnMessage, IMethodReturnMessage) Return returnMessage End Function 'Invoke Public Overrides Function CreateObjRef(ServerType As Type) As ObjRef Console.WriteLine("CreateObjRef Method Called ...") Dim myObjRef As New CustomObjRef(myMarshalByRefObject, ServerType) myObjRef.URI = myUri Return myObjRef End Function 'CreateObjRef Public Overrides Sub GetObjectData(info As SerializationInfo, context As StreamingContext) ' Add your custom data if any here. MyBase.GetObjectData(info, context) End Sub 'GetObjectData <PermissionSet(SecurityAction.Demand, Name:="FullTrust")> _ Public Class CustomObjRef Inherits ObjRef Public Sub New(myMarshalByRefObject As MarshalByRefObject, serverType As Type) MyBase.New(myMarshalByRefObject, serverType) Console.WriteLine("ObjRef 'Constructor' called") End Sub 'New ' Override this method to store custom data. <SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter:=true)> _ Public Overrides Sub GetObjectData(info As SerializationInfo, context As StreamingContext) MyBase.GetObjectData(info, context) End Sub 'GetObjectData End Class 'CustomObjRef End Class 'MyProxy <PermissionSet(SecurityAction.Demand, Name:="FullTrust")> _ Public Class ProxySample ' Acts as a custom proxy user. Public Shared Sub Main() Console.WriteLine("") Console.WriteLine("CustomProxy Sample") Console.WriteLine("================") Console.WriteLine("") ' Create an instance of MyProxy. Dim myProxyInstance As New MyProxy(GetType(CustomServer)) ' Get a CustomServer proxy. Dim myHelloServer As CustomServer = _ CType(myProxyInstance.GetTransparentProxy(), CustomServer) ' Get stubdata. Console.WriteLine("GetStubData = " + RealProxy.GetStubData(myProxyInstance).ToString()) ' Get ProxyType. Console.WriteLine("Type of object represented by RealProxy is :" + _ myProxyInstance.GetProxiedType().ToString()) myHelloServer.HelloMethod("RealProxy Sample") Console.WriteLine("") ' Get a reference object from server. Console.WriteLine("Create an objRef object to be marshalled across Application Domains...") Dim CustomObjRef As ObjRef = myProxyInstance.CreateObjRef(GetType(CustomServer)) Console.WriteLine("URI of 'ObjRef' object = " + CustomObjRef.URI) End Sub 'Main End Class 'ProxySample End Namespace 'Samples.AspNet.VB
using System; using System.Collections; using System.Runtime.Serialization; using System.Runtime.Remoting; using System.Runtime.Remoting.Activation; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Proxies; using System.Runtime.Remoting.Messaging; using System.Runtime.Remoting.Contexts; using System.Security.Permissions; namespace Samples { [AttributeUsage(AttributeTargets.Class)] [SecurityPermissionAttribute(SecurityAction.Demand, Flags=SecurityPermissionFlag.Infrastructure)] public class MyProxyAttribute : ProxyAttribute { public MyProxyAttribute() { } // Create an instance of ServicedComponentProxy public override MarshalByRefObject CreateInstance(Type serverType) { return base.CreateInstance(serverType); } public override RealProxy CreateProxy(ObjRef objRef1, Type serverType, object serverObject, Context serverContext) { MyProxy myCustomProxy = new MyProxy(serverType); if(serverContext != null) { RealProxy.SetStubData(myCustomProxy,serverContext); } if((!serverType.IsMarshalByRef)&&(serverContext == null)) { throw new RemotingException("Bad Type for CreateProxy"); } return myCustomProxy; } } [PermissionSet(SecurityAction.Demand, Name="FullTrust")] [MyProxyAttribute] public class CustomServer :ContextBoundObject { public CustomServer() { Console.WriteLine("CustomServer Base Class constructor called"); } public void HelloMethod(string str) { Console.WriteLine("HelloMethod of Server is invoked with message : " + str); } } [PermissionSet(SecurityAction.Demand, Name="FullTrust")] public class MyProxy : RealProxy { String myUri; MarshalByRefObject myMarshalByRefObject; public MyProxy(): base() { Console.WriteLine("MyProxy Constructor Called..."); myMarshalByRefObject = (MarshalByRefObject)Activator.CreateInstance(typeof(CustomServer)); ObjRef myObjRef = RemotingServices.Marshal(myMarshalByRefObject); myUri = myObjRef.URI; } public MyProxy(Type type1): base(type1) { Console.WriteLine("MyProxy Constructor Called..."); myMarshalByRefObject = (MarshalByRefObject)Activator.CreateInstance(type1); ObjRef myObjRef = RemotingServices.Marshal(myMarshalByRefObject); myUri = myObjRef.URI; } public MyProxy(Type type1, MarshalByRefObject targetObject) : base(type1) { Console.WriteLine("MyProxy Constructor Called..."); myMarshalByRefObject = targetObject; ObjRef myObjRef = RemotingServices.Marshal(myMarshalByRefObject); myUri = myObjRef.URI; } public override IMessage Invoke(IMessage myMessage) { Console.WriteLine("MyProxy 'Invoke method' Called..."); if (myMessage is IMethodCallMessage) { Console.WriteLine("IMethodCallMessage"); } if (myMessage is IMethodReturnMessage) { Console.WriteLine("IMethodReturnMessage"); } if (myMessage is IConstructionCallMessage) { // Initialize a new instance of remote object IConstructionReturnMessage myIConstructionReturnMessage = this.InitializeServerObject((IConstructionCallMessage)myMessage); ConstructionResponse constructionResponse = new ConstructionResponse(null,(IMethodCallMessage) myMessage); return constructionResponse; } IDictionary myIDictionary = myMessage.Properties; IMessage returnMessage; myIDictionary["__Uri"] = myUri; // Synchronously dispatch messages to server. returnMessage = ChannelServices.SyncDispatchMessage(myMessage); // Pushing return value and OUT parameters back onto stack. IMethodReturnMessage myMethodReturnMessage = (IMethodReturnMessage)returnMessage; return returnMessage; } public override ObjRef CreateObjRef(Type ServerType) { Console.WriteLine ("CreateObjRef Method Called ..."); CustomObjRef myObjRef = new CustomObjRef(myMarshalByRefObject ,ServerType); myObjRef.URI = myUri ; return myObjRef; } [PermissionSet(SecurityAction.Demand, Name="FullTrust")] public override void GetObjectData( SerializationInfo info, StreamingContext context) { // Add your custom data if any here. base.GetObjectData(info, context); } [PermissionSet(SecurityAction.Demand, Name="FullTrust")] public class CustomObjRef :ObjRef { public CustomObjRef(MarshalByRefObject myMarshalByRefObject,Type serverType): base(myMarshalByRefObject,serverType) { Console.WriteLine("ObjRef 'Constructor' called"); } // Override this method to store custom data. [SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter=true)] public override void GetObjectData(SerializationInfo info, StreamingContext context) { base.GetObjectData(info,context); } } } public class ProxySample { // Acts as a custom proxy user. [PermissionSet(SecurityAction.LinkDemand)] public static void Main() { Console.WriteLine(""); Console.WriteLine("CustomProxy Sample"); Console.WriteLine("================"); Console.WriteLine(""); // Create an instance of MyProxy. MyProxy myProxyInstance = new MyProxy(typeof(CustomServer)); // Get a CustomServer proxy. CustomServer myHelloServer = (CustomServer)myProxyInstance.GetTransparentProxy(); // Get stubdata. Console.WriteLine("GetStubData = " + RealProxy.GetStubData(myProxyInstance).ToString()); // Get ProxyType. Console.WriteLine("Type of object represented by RealProxy is :" + myProxyInstance.GetProxiedType()); myHelloServer.HelloMethod("RealProxy Sample"); Console.WriteLine(""); // Get a reference object from server. Console.WriteLine("Create an objRef object to be marshalled across Application Domains..."); ObjRef CustomObjRef = myProxyInstance.CreateObjRef(typeof(CustomServer)); Console.WriteLine("URI of 'ObjRef' object = " + CustomObjRef.URI); } } }
using namespace System; using namespace System::Collections; using namespace System::Runtime::Serialization; using namespace System::Runtime::Remoting; using namespace System::Runtime::Remoting::Activation; using namespace System::Runtime::Remoting::Channels; using namespace System::Runtime::Remoting::Proxies; using namespace System::Runtime::Remoting::Messaging; using namespace System::Runtime::Remoting::Contexts; using namespace System::Security::Permissions; ref class CustomServer; [SecurityPermissionAttribute(SecurityAction::Demand, Flags=SecurityPermissionFlag::Infrastructure)] public ref class MyProxy: public RealProxy { private: String^ myUri; MarshalByRefObject^ myMarshalByRefObject; public: MyProxy() : RealProxy() { Console::WriteLine( "MyProxy Constructor Called..." ); myMarshalByRefObject = dynamic_cast<MarshalByRefObject^>(Activator::CreateInstance( CustomServer::typeid )); ObjRef^ myObjRef = RemotingServices::Marshal( myMarshalByRefObject ); myUri = myObjRef->URI; } MyProxy( Type^ type1 ) : RealProxy( type1 ) { Console::WriteLine( "MyProxy Constructor Called..." ); myMarshalByRefObject = dynamic_cast<MarshalByRefObject^>(Activator::CreateInstance( type1 )); ObjRef^ myObjRef = RemotingServices::Marshal( myMarshalByRefObject ); myUri = myObjRef->URI; } MyProxy( Type^ type1, MarshalByRefObject^ targetObject ) : RealProxy( type1 ) { Console::WriteLine( "MyProxy Constructor Called..." ); myMarshalByRefObject = targetObject; ObjRef^ myObjRef = RemotingServices::Marshal( myMarshalByRefObject ); myUri = myObjRef->URI; } virtual IMessage^ Invoke( IMessage^ myMessage ) override { Console::WriteLine( "MyProxy 'Invoke method' Called..." ); if ( dynamic_cast<IMethodCallMessage^>(myMessage) ) { Console::WriteLine( "IMethodCallMessage*" ); } if ( dynamic_cast<IMethodReturnMessage^>(myMessage) ) { Console::WriteLine( "IMethodReturnMessage*" ); } if ( dynamic_cast<IConstructionCallMessage^>(myMessage) ) { // Initialize a new instance of remote object IConstructionReturnMessage^ myIConstructionReturnMessage = this->InitializeServerObject( static_cast<IConstructionCallMessage^>(myMessage) ); ConstructionResponse^ constructionResponse = gcnew ConstructionResponse( nullptr,static_cast<IMethodCallMessage^>(myMessage) ); return constructionResponse; } IDictionary^ myIDictionary = myMessage->Properties; IMessage^ returnMessage; myIDictionary[ "__Uri" ] = myUri; // Synchronously dispatch messages to server. returnMessage = ChannelServices::SyncDispatchMessage( myMessage ); // Pushing return value and OUT parameters back onto stack. IMethodReturnMessage^ myMethodReturnMessage = dynamic_cast<IMethodReturnMessage^>(returnMessage); return returnMessage; } virtual ObjRef^ CreateObjRef( Type^ ServerType ) override { Console::WriteLine( "CreateObjRef Method Called ..." ); CustomObjRef ^ myObjRef = gcnew CustomObjRef( myMarshalByRefObject,ServerType ); myObjRef->URI = myUri; return myObjRef; } virtual void GetObjectData( SerializationInfo^ info, StreamingContext context ) override { // Add your custom data if any here. RealProxy::GetObjectData( info, context ); } [System::Security::Permissions::SecurityPermissionAttribute( System::Security::Permissions::SecurityAction::Demand, Flags=System::Security::Permissions::SecurityPermissionFlag::SerializationFormatter)] [System::Security::Permissions::SecurityPermissionAttribute (System::Security::Permissions::SecurityAction::InheritanceDemand, Flags=System::Security::Permissions::SecurityPermissionFlag::Infrastructure)] ref class CustomObjRef: public ObjRef { public: CustomObjRef( MarshalByRefObject^ myMarshalByRefObject, Type^ serverType ) : ObjRef( myMarshalByRefObject, serverType ) { Console::WriteLine( "ObjRef 'Constructor' called" ); } // Override this method to store custom data. virtual void GetObjectData( SerializationInfo^ info, StreamingContext context ) override { ObjRef::GetObjectData( info, context ); } }; }; [AttributeUsageAttribute(AttributeTargets::Class)] [System::Security::Permissions::SecurityPermissionAttribute (System::Security::Permissions::SecurityAction::LinkDemand, Flags=System::Security::Permissions::SecurityPermissionFlag::Infrastructure)] [System::Security::Permissions::SecurityPermissionAttribute (System::Security::Permissions::SecurityAction::InheritanceDemand, Flags=System::Security::Permissions::SecurityPermissionFlag::Infrastructure)] public ref class MyProxyAttribute: public ProxyAttribute { public: MyProxyAttribute(){} // Create an instance of ServicedComponentProxy virtual MarshalByRefObject^ CreateInstance( Type^ serverType ) override { return ProxyAttribute::CreateInstance( serverType ); } virtual RealProxy^ CreateProxy( ObjRef^ objRef1, Type^ serverType, Object^ serverObject, Context^ serverContext ) override { MyProxy^ myCustomProxy = gcnew MyProxy( serverType ); if ( serverContext != nullptr ) { RealProxy::SetStubData( myCustomProxy, serverContext ); } if ( ( !serverType->IsMarshalByRef) && (serverContext == nullptr) ) { throw gcnew RemotingException( "Bad Type for CreateProxy" ); } return myCustomProxy; } }; [MyProxyAttribute] ref class CustomServer: public ContextBoundObject { public: CustomServer() { Console::WriteLine( "CustomServer Base Class constructor called" ); } void HelloMethod( String^ str ) { Console::WriteLine( "HelloMethod of Server is invoked with message : {0}", str ); } }; // Acts as a custom proxy user. int main() { Console::WriteLine( "" ); Console::WriteLine( "CustomProxy Sample" ); Console::WriteLine( "================" ); Console::WriteLine( "" ); // Create an instance of MyProxy. MyProxy^ myProxyInstance = gcnew MyProxy( CustomServer::typeid ); // Get a CustomServer proxy. CustomServer^ myHelloServer = static_cast<CustomServer^>(myProxyInstance->GetTransparentProxy()); // Get stubdata. Console::WriteLine( "GetStubData = {0}", RealProxy::GetStubData( myProxyInstance ) ); // Get ProxyType. Console::WriteLine( "Type of object represented by RealProxy is : {0}", myProxyInstance->GetProxiedType() ); myHelloServer->HelloMethod( "RealProxy Sample" ); Console::WriteLine( "" ); // Get a reference object from server. Console::WriteLine( "Create an objRef object to be marshalled across Application Domains..." ); ObjRef^ CustomObjRef = myProxyInstance->CreateObjRef( CustomServer::typeid ); Console::WriteLine( "URI of 'ObjRef' object = {0}", CustomObjRef->URI ); return 0; }

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


RealProxy コンストラクタ (Type)
アセンブリ: mscorlib (mscorlib.dll 内)



現在のメソッドは、GetTransparentProxy メソッドを使用してアクセスできる透過プロキシを作成します。
あらゆる種類のリモート処理の境界を越えてオブジェクトを使用するクライアントは、実際にはそのオブジェクトの透過プロキシを使用しています。透過プロキシは、実際のオブジェクトがクライアントの領域に格納されているような印象を与えます。これは、リモート処理インフラストラクチャを使用して、自らに対する呼び出しを実際のオブジェクトに転送することによって実現されます。
透過プロキシは、マネージ ランタイム クラス RealProxy のインスタンスに格納されます。RealProxy は、透過プロキシから操作を転送するために必要な機能の一部を実装します。なお、プロキシ オブジェクトは、ガベージ コレクション、フィールドやメソッドのサポートなど、マネージ オブジェクトの関連付けられたセマンティクスを継承し、新しいクラスを形成するために拡張できます。プロキシは、リモート オブジェクト (透過プロキシ) と同じクラスのオブジェクトとして機能すると同時に、マネージ オブジェクトでもあるという二重の性質を持っています。

' Create an instance of MyProxy. Dim myProxyInstance As New MyProxy(GetType(CustomServer)) ' Get a CustomServer proxy. Dim myHelloServer As CustomServer = _ CType(myProxyInstance.GetTransparentProxy(), CustomServer)

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


RealProxy コンストラクタ (Type, IntPtr, Object)
アセンブリ: mscorlib (mscorlib.dll 内)

Dim classToProxy As Type Dim stub As IntPtr Dim stubData As Object Dim instance As New RealProxy(classToProxy, stub, stubData)


スタブ データは、着信するメソッドの呼び出しをどのように処理するかを決定するためにカスタム プロキシ ユーザーによって使用されます。たとえば、スタブ データは、呼び出しをローカルで実行するか、リモート処理インフラストラクチャを通じて呼び出しを送信するかを決定するために使用できる、サーバーのコンテキストに関する情報の場合があります。


Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


RealProxy コンストラクタ

名前 | 説明 |
---|---|
RealProxy () | RealProxy クラスの新しいインスタンスを既定値で初期化します。 |
RealProxy (Type) | 指定した Type のリモート オブジェクトを表す、RealProxy クラスの新しいインスタンスを初期化します。 |
RealProxy (Type, IntPtr, Object) | RealProxy クラスの新しいインスタンスを初期化します。 |

RealProxy メソッド


名前 | 説明 | |
---|---|---|
![]() | AttachServer | 現在のプロキシ インスタンスを、指定したリモート MarshalByRefObject に結び付けます。 |
![]() | DetachServer | 現在のプロキシ インスタンスが表すリモート サーバー オブジェクトから、現在のプロキシ インスタンスを分離します。 |
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 ( Object から継承されます。) |
![]() | GetUnwrappedServer | 現在のプロキシ インスタンスが表すサーバー オブジェクトを返します。 |
![]() | MemberwiseClone | 現在の Object の簡易コピーを作成します。 ( Object から継承されます。) |

RealProxy メンバ
RealProxy データ型で公開されるメンバを以下の表に示します。



名前 | 説明 | |
---|---|---|
![]() | AttachServer | 現在のプロキシ インスタンスを、指定したリモート MarshalByRefObject に結び付けます。 |
![]() | DetachServer | 現在のプロキシ インスタンスが表すリモート サーバー オブジェクトから、現在のプロキシ インスタンスを分離します。 |
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。) |
![]() | GetUnwrappedServer | 現在のプロキシ インスタンスが表すサーバー オブジェクトを返します。 |
![]() | MemberwiseClone | 現在の Object の簡易コピーを作成します。 (Object から継承されます。) |

- RealProxyのページへのリンク