IMethodMessage インターフェイス

メソッド メッセージのインターフェイスを定義します。

この型のすべてのメンバの一覧については、IMethodMessage メンバ を参照してください。

System.Runtime.Remoting.Messaging.IMessage
   System.Runtime.Remoting.Messaging.IMethodMessage

Public Interface IMethodMessage
   Inherits IMessage
[C#]
public interface IMethodMessage : IMessage
[C++]
public __gc __interface IMethodMessage : public IMessage
[JScript]
public interface IMethodMessage implements IMessage

IMethodMessage を実装するクラス

クラス 説明
ReturnMessage リモート オブジェクトに対するメソッド呼び出しへの応答として返されるメッセージを保持します。

解説

メソッド メッセージは、リモートのメソッドに情報を送信したり、リモートのメソッドから情報を受信したりするために使用します。たとえば、リモートのメソッド呼び出しに使用されるメッセージは、 IMethodMessage インターフェイスを実装します。

使用例

[Visual Basic, C#, C++] RealProxy.Invoke をオーバーライドして、メッセージの情報をコンソールに書き込むカスタム プロキシについては、次のコード例を参照してください。この例では、リモート呼び出しを実行せずすぐに制御を戻します。

 
Public Class MyProxyClass
   Inherits RealProxy
   Private myObjectInstance As Object = Nothing
   Private myType As Type = Nothing
   
   Public Sub New(argType As Type)
      MyBase.New(argType)
      myType = argType
      myObjectInstance = Activator.CreateInstance(argType)
   End Sub 'New
   
   ' Overriding the Invoke method of RealProxy.
   Public Overrides Function Invoke(message As IMessage) As IMessage
      Dim myMethodMessage As IMethodMessage = CType(message, IMethodMessage)
      
      Console.WriteLine("**** Begin Invoke ****")
      Console.WriteLine(ControlChars.Tab + "Type is : " + myType.ToString())
      Console.WriteLine(ControlChars.Tab + "Method name : " + myMethodMessage.MethodName)
      
      Dim i As Integer
      For i = 0 To myMethodMessage.ArgCount - 1
         Console.WriteLine(ControlChars.Tab + "ArgName is : " + myMethodMessage.GetArgName(i))
         Console.WriteLine(ControlChars.Tab + "ArgValue is: " + myMethodMessage.GetArg(i))
      Next i
      
      If myMethodMessage.HasVarArgs Then
         Console.WriteLine(ControlChars.Tab + " The method have variable arguments!!")
      Else
         Console.WriteLine(ControlChars.Tab + " The method does not have variable arguments!!")
      End If 
      ' Dispatch the method call to the real object.
      Dim returnValue As Object = myType.InvokeMember(myMethodMessage.MethodName, _
                     BindingFlags.InvokeMethod, Nothing, myObjectInstance, myMethodMessage.Args)
      Console.WriteLine("**** End Invoke ****")
      
      ' Build the return message to pass back to the transparent proxy.
      Dim myReturnMessage As New ReturnMessage(returnValue, Nothing, 0, Nothing, _
                                                         CType(message, IMethodCallMessage))
      Return myReturnMessage
   End Function 'Invoke
End Class 'MyProxyClass

[C#] 
public class MyProxyClass : RealProxy
{
   private Object  myObjectInstance  = null;
   private Type    myType      = null;

   public MyProxyClass(Type argType) : base(argType)
   {
      myType = argType;
      myObjectInstance = Activator.CreateInstance(argType);
   }

   // Overriding the Invoke method of RealProxy.
   public override IMessage Invoke(IMessage message)
   {
      IMethodMessage myMethodMessage = (IMethodMessage)message;

      Console.WriteLine("**** Begin Invoke ****");
      Console.WriteLine("\tType is : " + myType);
      Console.WriteLine("\tMethod name : " +  myMethodMessage.MethodName);

      for (int i=0; i < myMethodMessage.ArgCount; i++)
      {
         Console.WriteLine("\tArgName is : " + myMethodMessage.GetArgName(i));
         Console.WriteLine("\tArgValue is: " + myMethodMessage.GetArg(i));
      }

      if(myMethodMessage.HasVarArgs)
          Console.WriteLine("\t The method have variable arguments!!");
      else
          Console.WriteLine("\t The method does not have variable arguments!!");

      // Dispatch the method call to the real object.
      Object returnValue = myType.InvokeMember( myMethodMessage.MethodName, BindingFlags.InvokeMethod, null,
                                           myObjectInstance, myMethodMessage.Args );
      Console.WriteLine("**** End Invoke ****");

      // Build the return message to pass back to the transparent proxy.
      ReturnMessage myReturnMessage = new ReturnMessage( returnValue, null, 0, null,
          (IMethodCallMessage)message );
      return myReturnMessage;
   }
}

[C++] 
public __gc class MyProxyClass : public RealProxy 
{
private:
    Object* myObjectInstance;
private:
    Type* myType;

public:
    MyProxyClass(Type* argType) : RealProxy(argType) 
    {
        myType = argType;
        myObjectInstance = Activator::CreateInstance(argType);
    }

    // Overriding the Invoke method of RealProxy.
public:
    IMessage* Invoke(IMessage* message) 
    {
        IMethodMessage* myMethodMessage = dynamic_cast<IMethodMessage*>(message);

        Console::WriteLine(S"**** Begin Invoke ****");
        Console::WriteLine(S"\tType is : {0}", myType);
        Console::WriteLine(S"\tMethod name : {0}", myMethodMessage->MethodName);

        for (int i=0; i < myMethodMessage->ArgCount; i++) 
        {
            Console::WriteLine(S"\tArgName is : {0}", myMethodMessage->GetArgName(i));
            Console::WriteLine(S"\tArgValue is: {0}", myMethodMessage->GetArg(i));
        }

        if (myMethodMessage->HasVarArgs)
            Console::WriteLine(S"\t The method have variable arguments!!");
        else
            Console::WriteLine(S"\t The method does not have variable arguments!!");

        // Dispatch the method call to the real Object*.
        Object* returnValue = myType->InvokeMember(myMethodMessage->MethodName, BindingFlags::InvokeMethod, 0,
            myObjectInstance, myMethodMessage->Args);
        Console::WriteLine(S"**** End Invoke ****");

        // Build the return message to pass back to the transparent proxy.
        ReturnMessage* myReturnMessage = new ReturnMessage(returnValue, 0, 0, 0,
            dynamic_cast<IMethodCallMessage*>(message));
        return myReturnMessage;
    }
};

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

必要条件

名前空間: System.Runtime.Remoting.Messaging

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

アセンブリ: Mscorlib (Mscorlib.dll 内)

参照

IMethodMessage メンバ | System.Runtime.Remoting.Messaging 名前空間