RealProxy.Invoke Method (IMessage)

 

When overridden in a derived class, invokes the method that is specified in the provided IMessage on the remote object that is represented by the current instance.

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

public abstract IMessage Invoke(
	IMessage msg
)

Parameters

msg
Type: System.Runtime.Remoting.Messaging.IMessage

A IMessage that contains a IDictionary of information about the method call.

Return Value

Type: System.Runtime.Remoting.Messaging.IMessage

The message returned by the invoked method, containing the return value and any out or ref parameters.

When the transparent proxy that is backed by the RealProxy is called, it delegates the calls to the Invoke method. The Invoke method transforms the message in the msg parameter into a IMethodCallMessage, and sends it to the remote object that is represented by the current instance of RealProxy.

The IMessage parameter provides a dictionary through the IMessage.Properties property. The dictionary contains name/value pairs of information about the method call, such as the name of the method called and its parameters.

public override IMessage Invoke(IMessage myMessage)
{
   Console.WriteLine("MyProxy 'Invoke method' Called...");
   if (myMessage is IMethodCallMessage)
   {
      Console.WriteLine("IMethodCallMessage");
   }
   if (myMessage is IMethodReturnMessage)
   {
      Console.WriteLine("IMethodReturnMessage");
   }
   if (myMessage is IConstructionCallMessage)
   {  
      // Initialize a new instance of remote object
      IConstructionReturnMessage myIConstructionReturnMessage = 
         this.InitializeServerObject((IConstructionCallMessage)myMessage);
      ConstructionResponse constructionResponse = new 
         ConstructionResponse(null,(IMethodCallMessage) myMessage);
      return constructionResponse;
   }
   IDictionary myIDictionary = myMessage.Properties;
   IMessage returnMessage;
   myIDictionary["__Uri"] = myUri;

   // Synchronously dispatch messages to server.
   returnMessage = ChannelServices.SyncDispatchMessage(myMessage);
   // Pushing return value and OUT parameters back onto stack.
   IMethodReturnMessage myMethodReturnMessage = (IMethodReturnMessage)returnMessage;
   return returnMessage;
}

.NET Framework
Available since 1.1
Return to top
Show: