This documentation is archived and is not being maintained.

IMethodReturnMessage Interface

Defines the method call return message interface.

For a list of all members of this type, see IMethodReturnMessage Members.

[Visual Basic]
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

Classes that Implement IMethodReturnMessage

Class Description
ReturnMessage Holds a message returned in response to a method call on a remote object.

Remarks

A method call return message represents the response to a method call on an object at the end of the message sink. An IMethodReturnMessage is generated as a result of a method called on a remote object, and is used to return the results of the method call back to the caller.

Example

[Visual Basic, C#, C++] The following example code shows a custom proxy that overrides RealProxy.Invoke in order to write the return message information to the console.

[Visual Basic] 
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] No example is available for JScript. To view a Visual Basic, C#, or C++ example, click the Language Filter button Language Filter in the upper-left corner of the page.

Requirements

Namespace: System.Runtime.Remoting.Messaging

Platforms: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 family

Assembly: Mscorlib (in Mscorlib.dll)

See Also

IMethodReturnMessage Members | System.Runtime.Remoting.Messaging Namespace

Show: