次の方法で共有


RealProxy.Invoke メソッド

派生クラスでオーバーライドされた場合は、提供された IMessage で指定されたメソッドを、現在のインスタンスが表すリモート オブジェクトで呼び出します。

Public MustOverride Function Invoke( _
   ByVal msg As IMessage _) As IMessage
[C#]
public abstract IMessage Invoke(IMessagemsg);
[C++]
public: virtual IMessage* Invoke(IMessage* msg) = 0;
[JScript]
public abstract function Invoke(
   msg : IMessage) : IMessage;

パラメータ

  • msg
    メソッドの呼び出しに関する情報の IDictionary を格納している IMessage

戻り値

呼び出されたメソッドが返すメッセージで、 out パラメータまたは ref パラメータのどちらかと戻り値を格納しているメッセージ。

解説

RealProxy によって回復された透過プロキシが呼び出されると、透過プロキシはこの呼び出しを Invoke メソッドにデリゲートします。 Invoke メソッドは、 msg パラメータのメッセージを IMethodCallMessage に変換し、 RealProxy の現在のインスタンスで表されるリモート オブジェクトに送信します。

IMessage パラメータは、 IMessage.Properties プロパティを使用してディクショナリを提供します。ディクショナリは、呼び出されたメソッドの名前やそのパラメータなど、メソッドの呼び出しに関する情報の名前/値ペアを格納しています。

使用例

 
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

[C#] 
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;
}

[C++] 
public:
    IMessage* Invoke(IMessage* myMessage) 
    {
        Console::WriteLine(S"MyProxy 'Invoke method' Called...");
        if (dynamic_cast<IMethodCallMessage*>(myMessage)) 
        {
            Console::WriteLine(S"IMethodCallMessage*");
        }
        if (dynamic_cast<IMethodReturnMessage*>(myMessage)) 
        {
            Console::WriteLine(S"IMethodReturnMessage*");
        }
        if (dynamic_cast<IConstructionCallMessage*>(myMessage))
        {  
            // Initialize a new instance of remote Object*
            IConstructionReturnMessage* myIConstructionReturnMessage = 
                this->InitializeServerObject(static_cast<IConstructionCallMessage*>(myMessage));
            ConstructionResponse* constructionResponse = new ConstructionResponse(0, static_cast<IMethodCallMessage*>(myMessage));
            return constructionResponse;
        }
        IDictionary* myIDictionary = myMessage->Properties;
        IMessage* returnMessage;
        myIDictionary->Item[S"__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;
    }

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

参照

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