IMethodMessage Interface

 

Defines the method message interface.

Namespace:   System.Runtime.Remoting.Messaging
Assembly:  mscorlib (in mscorlib.dll)

[ComVisibleAttribute(true)]
public interface class IMethodMessage : IMessage

NameDescription
System_CAPS_pubpropertyArgCount

Gets the number of arguments passed to the method.

System_CAPS_pubpropertyArgs

Gets an array of arguments passed to the method.

System_CAPS_pubpropertyHasVarArgs

Gets a value indicating whether the message has variable arguments.

System_CAPS_pubpropertyLogicalCallContext

Gets the LogicalCallContext for the current method call.

System_CAPS_pubpropertyMethodBase

Gets the MethodBase of the called method.

System_CAPS_pubpropertyMethodName

Gets the name of the invoked method.

System_CAPS_pubpropertyMethodSignature

Gets an object containing the method signature.

System_CAPS_pubpropertyProperties

Gets an IDictionary that represents a collection of the message's properties.(Inherited from IMessage.)

System_CAPS_pubpropertyTypeName

Gets the full Type name of the specific object that the call is destined for.

System_CAPS_pubpropertyUri

Gets the URI of the specific object that the call is destined for.

NameDescription
System_CAPS_pubmethodGetArg(Int32)

Gets a specific argument as an Object.

System_CAPS_pubmethodGetArgName(Int32)

Gets the name of the argument passed to the method.

A method message is used to send information to and from remote methods. For example, messages used for remote method calls implement the IMethodMessage interface.

The following example code shows a custom proxy that overrides RealProxy.Invoke in order to write the message information to the console and return immediately without making a remote call.

// This class requires full trust
[PermissionSetAttribute(SecurityAction::Demand, Name = "FullTrust")]
public ref class MyProxyClass: public RealProxy
{
private:
   Object^ myObjectInstance;
   Type^ myType;

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

   // Overriding the Invoke method of RealProxy.
   virtual IMessage^ Invoke( IMessage^ message ) override
   {
      IMethodMessage^ myMethodMessage = dynamic_cast<IMethodMessage^>(message);
      Console::WriteLine( "**** Begin Invoke ****" );
      Console::WriteLine( "\tType is : {0}", myType );
      Console::WriteLine( "\tMethod name : {0}", myMethodMessage->MethodName );
      for ( int i = 0; i < myMethodMessage->ArgCount; i++ )
      {
         Console::WriteLine( "\tArgName is : {0}", myMethodMessage->GetArgName( i ) );
         Console::WriteLine( "\tArgValue is: {0}", 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, nullptr, myObjectInstance, myMethodMessage->Args );
      Console::WriteLine( "**** End Invoke ****" );

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

.NET Framework
Available since 1.1
Return to top
Show: