次の方法で共有


IMethodReturnMessage インターフェイス

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

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

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

IMethodReturnMessage を実装するクラス

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

解説

メソッド呼び出しの応答メッセージは、メッセージ シンク側における、オブジェクトに対するメソッド呼び出しへの応答を表します。 IMethodReturnMessage は、リモート オブジェクトに対して呼び出されたメソッドの結果として生成され、そのメソッド呼び出しの結果を呼び出し元に返すために使用されます。

使用例

[Visual Basic, C#, C++] RealProxy.Invoke をオーバーライドして、返されたメッセージの情報をコンソールに書き込むカスタム プロキシについては、次のコード例を参照してください。

 
Public Class MyProxy
   Inherits RealProxy
   Private stringUri As String
   Private myMarshalByRefObject As MarshalByRefObject
   
   Public Sub New(myType As Type)
      MyBase.New(myType)
      myMarshalByRefObject = CType(Activator.CreateInstance(myType), MarshalByRefObject)
      Dim myObject As ObjRef = RemotingServices.Marshal(myMarshalByRefObject)
      stringUri = myObject.URI
   End Sub 'New
   
   Public Overrides Function Invoke(myMessage As IMessage) As IMessage
      Dim myCallMessage As IMethodCallMessage = CType(myMessage, IMethodCallMessage)

      Dim myIMethodReturnMessage As IMethodReturnMessage = RemotingServices. _
         ExecuteMessage(myMarshalByRefObject, myCallMessage)

      Console.WriteLine("Method name : " + myIMethodReturnMessage.MethodName)
      Console.WriteLine("The return value is : " + myIMethodReturnMessage.ReturnValue)
      
      ' Get number of 'ref' and 'out' parameters.
      Dim myArgOutCount As Integer = myIMethodReturnMessage.OutArgCount
      Console.WriteLine("The number of 'ref', 'out' parameters are : " + _
         myIMethodReturnMessage.OutArgCount.ToString())
      ' Gets name and values of 'ref' and 'out' parameters.
      Dim i As Integer
      For i = 0 To myArgOutCount - 1
         Console.WriteLine("Name of argument {0} is '{1}'.", i, _
            myIMethodReturnMessage.GetOutArgName(i))
         Console.WriteLine("Value of argument {0} is '{1}'.", i, _
            myIMethodReturnMessage.GetOutArg(i))
      Next i
      Console.WriteLine()
      Dim myObjectArray As Object() = myIMethodReturnMessage.OutArgs
      For i = 0 To myObjectArray.Length - 1
         Console.WriteLine("Value of argument {0} is '{1}' in OutArgs", i, myObjectArray(i))
      Next i
      Return myIMethodReturnMessage
   End Function 'Invoke
End Class 'MyProxy

[C#] 
public class MyProxy : RealProxy
{
   String stringUri;
   MarshalByRefObject myMarshalByRefObject;

   public MyProxy(Type myType): base(myType)
   {
      myMarshalByRefObject = (MarshalByRefObject)Activator.CreateInstance(myType);
      ObjRef myObject = RemotingServices.Marshal(myMarshalByRefObject);
      stringUri = myObject.URI;
   }

   public override IMessage Invoke(IMessage myMessage)
   {
      IMethodCallMessage myCallMessage = (IMethodCallMessage)myMessage;

      IMethodReturnMessage myIMethodReturnMessage =
         RemotingServices.ExecuteMessage(myMarshalByRefObject, myCallMessage);

      Console.WriteLine("Method name : " + myIMethodReturnMessage.MethodName);
      Console.WriteLine("The return value is : " + myIMethodReturnMessage.ReturnValue);

      // Get number of 'ref' and 'out' parameters.
      int myArgOutCount = myIMethodReturnMessage.OutArgCount;
      Console.WriteLine("The number of 'ref', 'out' parameters are : " +
         myIMethodReturnMessage.OutArgCount);
      // Gets name and values of 'ref' and 'out' parameters.
      for(int i = 0; i < myArgOutCount; i++)
      {
         Console.WriteLine("Name of argument {0} is '{1}'.",
            i, myIMethodReturnMessage.GetOutArgName(i));
         Console.WriteLine("Value of argument {0} is '{1}'.",
            i, myIMethodReturnMessage.GetOutArg(i));
      }
      Console.WriteLine();
      object[] myObjectArray = myIMethodReturnMessage.OutArgs; 
      for(int i = 0; i < myObjectArray.Length; i++)
         Console.WriteLine("Value of argument {0} is '{1}' in OutArgs",
            i, myObjectArray[i]);
      return myIMethodReturnMessage;
   }
}

[C++] 
public __gc class MyProxy : public RealProxy 
{
    String* stringUri;
    MarshalByRefObject* myMarshalByRefObject;

public:
    MyProxy(Type* myType) : RealProxy(myType) 
    {
        myMarshalByRefObject = dynamic_cast<MarshalByRefObject*>(Activator::CreateInstance(myType));
        ObjRef* myObject = RemotingServices::Marshal(myMarshalByRefObject);
        stringUri = myObject->URI;
    }

public:
    IMessage* Invoke(IMessage* myMessage) 
    {
        IMethodCallMessage* myCallMessage = dynamic_cast<IMethodCallMessage*>(myMessage);

        IMethodReturnMessage* myIMethodReturnMessage =
            RemotingServices::ExecuteMessage(myMarshalByRefObject, myCallMessage);

        Console::WriteLine(S"Method name : {0}", myIMethodReturnMessage->MethodName);
        Console::WriteLine(S"The return value is : {0}", myIMethodReturnMessage->ReturnValue);

        // Get number of 'ref' and 'out' parameters.
        int myArgOutCount = myIMethodReturnMessage->OutArgCount;
        Console::WriteLine(S"The number of 'ref', 'out' parameters are : {0}", __box(myIMethodReturnMessage->OutArgCount));
        // Gets name and values of 'ref' and 'out' parameters.
        for (int i = 0; i < myArgOutCount; i++) {
            Console::WriteLine(S"Name of argument {0} is ' {1}'.",
                __box(i), myIMethodReturnMessage->GetOutArgName(i));
            Console::WriteLine(S"Value of argument {0} is ' {1}'.",
                __box(i), myIMethodReturnMessage->GetOutArg(i));
        }
        Console::WriteLine();
        Object* myObjectArray[] = myIMethodReturnMessage->OutArgs; 
        for (int i = 0; i < myObjectArray->Length; i++)
            Console::WriteLine(S"Value of argument {0} is ' {1}' in OutArgs",
            __box(i), myObjectArray[i]);
        return myIMethodReturnMessage;
    }
};

[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 内)

参照

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