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)


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

- SecurityPermission アンマネージ コードを呼び出すために必要なアクセス許可。SecurityPermissionFlag.UnmanagedCode (関連する列挙体)

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 コンストラクタ ()
アセンブリ: 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 コンストラクタのページへのリンク