IMethodMessage IMethodMessage IMethodMessage IMethodMessage Interface


定义方法消息接口。Defines the method message interface.

public interface class IMethodMessage : System::Runtime::Remoting::Messaging::IMessage
public interface IMethodMessage : System.Runtime.Remoting.Messaging.IMessage
type IMethodMessage = interface
    interface IMessage
Public Interface IMethodMessage
Implements IMessage


下面的示例代码演示了重写RealProxy.Invoke的自定义代理, 以便将消息信息写入控制台并立即返回而不进行远程调用。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
   Object^ myObjectInstance;
   Type^ myType;

   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!!" );
            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;
[PermissionSet(SecurityAction.Demand, Name="FullTrust")]
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));

          Console.WriteLine("\t The method have variable arguments!!");
          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;
<PermissionSet(SecurityAction.Demand, Name:="FullTrust")> _
Public Class MyProxyClass
   Inherits RealProxy
   Private myObjectInstance As Object = Nothing
   Private myType As Type = Nothing
   Public Sub New(argType As Type)
      myType = argType
      myObjectInstance = Activator.CreateInstance(argType)
   End Sub
   ' 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!!")
         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


方法消息用于向远程方法发送信息。A method message is used to send information to and from remote methods. 例如, 用于远程方法调用的消息将IMethodMessage实现接口。For example, messages used for remote method calls implement the IMethodMessage interface.


ArgCount ArgCount ArgCount ArgCount

获取传递给该方法的参数的数目。Gets the number of arguments passed to the method.

Args Args Args Args

获取传递给该方法的参数数组。Gets an array of arguments passed to the method.

HasVarArgs HasVarArgs HasVarArgs HasVarArgs

获取一个值,该值指示消息是否具有变量参数。Gets a value indicating whether the message has variable arguments.

LogicalCallContext LogicalCallContext LogicalCallContext LogicalCallContext

获取当前方法调用的 LogicalCallContextGets the LogicalCallContext for the current method call.

MethodBase MethodBase MethodBase MethodBase

获取被调用方法的 MethodBaseGets the MethodBase of the called method.

MethodName MethodName MethodName MethodName

获取被调用方法的名称。Gets the name of the invoked method.

MethodSignature MethodSignature MethodSignature MethodSignature

获取包含方法签名的对象。Gets an object containing the method signature.

Properties Properties Properties Properties

获取表示消息属性集合的 IDictionaryGets an IDictionary that represents a collection of the message's properties.

(Inherited from IMessage)
TypeName TypeName TypeName TypeName

获取要将该调用发送到的特定对象的完整 Type 名称。Gets the full Type name of the specific object that the call is destined for.

Uri Uri Uri Uri

获取要将该调用发送到的特定对象的 URI。Gets the URI of the specific object that the call is destined for.


GetArg(Int32) GetArg(Int32) GetArg(Int32) GetArg(Int32)

获取作为 Object 的特定参数。Gets a specific argument as an Object.

GetArgName(Int32) GetArgName(Int32) GetArgName(Int32) GetArgName(Int32)

获取传递给该方法的参数的名称。Gets the name of the argument passed to the method.