RealProxyとは? わかりやすく解説

RealProxy クラス

プロキシ基本機能提供します

名前空間: System.Runtime.Remoting.Proxies
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

<ComVisibleAttribute(True)> _
Public MustInherit Class
 RealProxy
[ComVisibleAttribute(true)] 
public abstract class RealProxy
[ComVisibleAttribute(true)] 
public ref class RealProxy abstract
/** @attribute ComVisibleAttribute(true) */ 
public abstract class RealProxy
ComVisibleAttribute(true) 
public abstract class RealProxy
解説解説

RealProxy クラスは、プロキシ派生元である abstract 基本クラスです。

あらゆる種類リモート処理境界越えてオブジェクト使用するクライアントは、実際にはそのオブジェクト透過プロキシ使用してます。透過プロキシは、実際オブジェクトクライアント領域格納されているように見せかけます。これは、リモート処理インフラストラクチャ使用して、自らに対す呼び出し実際オブジェクト転送することによって実現されます。

透過プロキシ自体は、RealProxy 型のマネージ ランタイム クラスインスタンス格納されます。RealProxy は、透過プロキシから操作転送するために必要な機能一部実装ます。なお、プロキシ オブジェクトは、ガベージ コレクションフィールドメソッドサポートなど、マネージ オブジェクト関連付けられたセマンティクス継承し新しクラス形成するために拡張できますプロキシは、リモート オブジェクト (透過プロキシ) と同じクラスオブジェクトとして機能する同時にマネージ オブジェクトでもあるという二重の性質持ってます。

プロキシ オブジェクトは、AppDomain 内のリモート処理サブ区分考慮せず使用できます

メモメモ

このクラスは、リンク確認要求継承確認要求クラス レベル行います直前呼び出し元または派生クラスインフラストラクチャ アクセス許可ない場合、SecurityException がスローさます。セキュリティ要求詳細については、「リンク確認要求」および「継承確認要求」を参照してください

継承時の注意 RealProxy から継承する場合は、Invoke メソッドオーバーライドする必要があります

使用例使用例
' 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
.NET Framework のセキュリティ.NET Frameworkセキュリティ
継承階層継承階層
System.Object
  System.Runtime.Remoting.Proxies.RealProxy
スレッド セーフスレッド セーフ
この型の public static (Visual Basic では Shared) メンバはすべて、スレッド セーフです。インスタンス メンバ場合は、スレッド セーフであるとは限りません。
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
RealProxy メンバ
System.Runtime.Remoting.Proxies 名前空間

RealProxy コンストラクタ ()

RealProxy クラス新しインスタンス既定値初期化します。

名前空間: System.Runtime.Remoting.Proxies
アセンブリ: 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;
}
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
RealProxy クラス
RealProxy メンバ
System.Runtime.Remoting.Proxies 名前空間

RealProxy コンストラクタ (Type)

指定した Typeリモート オブジェクトを表す、RealProxy クラス新しインスタンス初期化します。

名前空間: System.Runtime.Remoting.Proxies
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

Protected Sub New ( _
    classToProxy As Type _
)
Dim classToProxy As Type

Dim instance As New RealProxy(classToProxy)
protected RealProxy (
    Type classToProxy
)
protected:
RealProxy (
    Type^ classToProxy
)
protected RealProxy (
    Type classToProxy
)
protected function RealProxy (
    classToProxy : Type
)

パラメータ

classToProxy

プロキシ作成対象リモート オブジェクトType

例外例外
例外種類条件

ArgumentException

classToProxyインターフェイスではなく、MarshalByRefObject からも派生していません。

解説解説
使用例使用例
' Create an instance of MyProxy.
Dim myProxyInstance As New
 MyProxy(GetType(CustomServer))
' Get a CustomServer proxy.
Dim myHelloServer As CustomServer = _
            CType(myProxyInstance.GetTransparentProxy(), CustomServer)
// Create an instance of MyProxy.
MyProxy myProxyInstance = new MyProxy(typeof(CustomServer));
// Get a CustomServer proxy.
CustomServer myHelloServer = (CustomServer)myProxyInstance.GetTransparentProxy();
// Create an instance of MyProxy.
MyProxy^ myProxyInstance = gcnew MyProxy( CustomServer::typeid );

// Get a CustomServer proxy.
CustomServer^ myHelloServer = static_cast<CustomServer^>(myProxyInstance->GetTransparentProxy());
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
RealProxy クラス
RealProxy メンバ
System.Runtime.Remoting.Proxies 名前空間

RealProxy コンストラクタ (Type, IntPtr, Object)

RealProxy クラス新しインスタンス初期化します。

名前空間: System.Runtime.Remoting.Proxies
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

Protected Sub New ( _
    classToProxy As Type, _
    stub As IntPtr, _
    stubData As Object _
)
Dim classToProxy As Type
Dim stub As IntPtr
Dim stubData As Object

Dim instance As New RealProxy(classToProxy,
 stub, stubData)
protected RealProxy (
    Type classToProxy,
    IntPtr stub,
    Object stubData
)
protected:
RealProxy (
    Type^ classToProxy, 
    IntPtr stub, 
    Object^ stubData
)
protected RealProxy (
    Type classToProxy, 
    IntPtr stub, 
    Object stubData
)
protected function RealProxy (
    classToProxy : Type, 
    stub : IntPtr, 
    stubData : Object
)

パラメータ

classToProxy

プロキシ作成対象リモート オブジェクトType

stub

新しプロキシ インスタンス関連付けるスタブ

stubData

指定したスタブ新しプロキシ インスタンス設定するスタブ データ

例外例外
例外種類条件

ArgumentException

classToProxyインターフェイスではなく、MarshalByRefObject からも派生していません。

解説解説
.NET Framework のセキュリティ.NET Frameworkセキュリティ
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
RealProxy クラス
RealProxy メンバ
System.Runtime.Remoting.Proxies 名前空間

RealProxy コンストラクタ

RealProxy クラス新しインスタンス初期化します。
オーバーロードの一覧オーバーロードの一覧

参照参照

関連項目

RealProxy クラス
RealProxy メンバ
System.Runtime.Remoting.Proxies 名前空間

RealProxy メソッド


パブリック メソッドパブリック メソッド

( プロテクト メソッド参照)
  名前 説明
パブリック メソッド CreateObjRef 指定したオブジェクト型の ObjRef を作成しリモート処理インフラストラクチャクライアント側アクティブ化されるオブジェクトとして登録します
パブリック メソッド Equals  オーバーロードされます2 つObject インスタンス等しかどうか判断します。 ( Object から継承されます。)
パブリック メソッド GetCOMIUnknown 現在のプロキシ インスタンスが表すオブジェクトへのアンマネージ参照要求します
パブリック メソッド GetHashCode  特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用適してます。 ( Object から継承されます。)
パブリック メソッド GetObjectData RealProxy の現在のインスタンスが表すオブジェクト透過プロキシを、指定した SerializationInfo に追加します
パブリック メソッド GetProxiedType RealProxy現在のインスタンスが表すオブジェクトType返します
パブリック メソッド GetStubData 指定したプロキシ用に格納されスタブ データ取得します
パブリック メソッド GetTransparentProxy RealProxy現在のインスタンス透過プロキシ返します
パブリック メソッド GetType  現在のインスタンスType取得します。 ( Object から継承されます。)
パブリック メソッド InitializeServerObject 指定した IConstructionCallMessage を使用してRealProxy現在のインスタンスが表すリモート オブジェクトオブジェクト Type新しインスタンス初期化します。
パブリック メソッド Invoke 派生クラスオーバーライドされた場合は、提供されIMessage指定されメソッドを、現在のインスタンスが表すリモート オブジェクト呼び出します。
パブリック メソッド ReferenceEquals  指定した複数Object インスタンス同一かどうか判断します。 ( Object から継承されます。)
パブリック メソッド SetCOMIUnknown 現在のインスタンスが表すオブジェクトのアンマネージ プロキシ格納します
パブリック メソッド SetStubData 指定したプロキシスタブ データ設定します
パブリック メソッド SupportsInterface 指定した ID使用して COM インターフェイス要求します
パブリック メソッド ToString  現在の Object を表す String返します。 ( Object から継承されます。)
プロテクト メソッドプロテクト メソッド
参照参照

関連項目

RealProxy クラス
System.Runtime.Remoting.Proxies 名前空間

RealProxy メンバ

プロキシ基本機能提供します

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


プロテクト コンストラクタプロテクト コンストラクタ
パブリック メソッドパブリック メソッド
( プロテクト メソッド参照)
  名前 説明
パブリック メソッド CreateObjRef 指定したオブジェクト型の ObjRef を作成しリモート処理インフラストラクチャクライアント側アクティブ化されるオブジェクトとして登録します
パブリック メソッド Equals  オーバーロードされます2 つObject インスタンス等しかどうか判断します。 (Object から継承されます。)
パブリック メソッド GetCOMIUnknown 現在のプロキシ インスタンスが表すオブジェクトへのアンマネージ参照要求します
パブリック メソッド GetHashCode  特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用適してます。 (Object から継承されます。)
パブリック メソッド GetObjectData RealProxy の現在のインスタンスが表すオブジェクト透過プロキシを、指定した SerializationInfo に追加します
パブリック メソッド GetProxiedType RealProxy現在のインスタンスが表すオブジェクトType返します
パブリック メソッド GetStubData 指定したプロキシ用に格納されスタブ データ取得します
パブリック メソッド GetTransparentProxy RealProxy現在のインスタンス透過プロキシ返します
パブリック メソッド GetType  現在のインスタンスType取得します。 (Object から継承されます。)
パブリック メソッド InitializeServerObject 指定した IConstructionCallMessage を使用してRealProxy現在のインスタンスが表すリモート オブジェクトオブジェクト Type新しインスタンス初期化します。
パブリック メソッド Invoke 派生クラスオーバーライドされた場合は、提供されIMessage指定されメソッドを、現在のインスタンスが表すリモート オブジェクト呼び出します。
パブリック メソッド ReferenceEquals  指定した複数Object インスタンス同一かどうか判断します。 (Object から継承されます。)
パブリック メソッド SetCOMIUnknown 現在のインスタンスが表すオブジェクトのアンマネージ プロキシ格納します
パブリック メソッド SetStubData 指定したプロキシスタブ データ設定します
パブリック メソッド SupportsInterface 指定した ID使用して COM インターフェイス要求します
パブリック メソッド ToString  現在の Object を表す String返します。 (Object から継承されます。)
プロテクト メソッドプロテクト メソッド
参照参照

関連項目

RealProxy クラス
System.Runtime.Remoting.Proxies 名前空間



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「RealProxy」の関連用語

RealProxyのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



RealProxyのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2025 Microsoft.All rights reserved.

©2025 GRAS Group, Inc.RSS