Поделиться через


RealProxy.Invoke(IMessage) Метод

Определение

При переопределении в производном классе вызывает метод, заданный в предоставленном IMessage на удаленный объект, представленный текущим экземпляром.

public:
 abstract System::Runtime::Remoting::Messaging::IMessage ^ Invoke(System::Runtime::Remoting::Messaging::IMessage ^ msg);
public abstract System.Runtime.Remoting.Messaging.IMessage Invoke (System.Runtime.Remoting.Messaging.IMessage msg);
abstract member Invoke : System.Runtime.Remoting.Messaging.IMessage -> System.Runtime.Remoting.Messaging.IMessage
Public MustOverride Function Invoke (msg As IMessage) As IMessage

Параметры

msg
IMessage

IMessage, содержащий IDictionary с информацией о вызове метода.

Возвращаемое значение

Сообщение, возвращенное вызванным методом, содержащее возвращаемое значение и любой из параметров out или ref.

Примеры

virtual IMessage^ Invoke( IMessage^ myMessage ) override
{
   Console::WriteLine( "MyProxy 'Invoke method' Called..." );
   if ( dynamic_cast<IMethodCallMessage^>(myMessage) )
   {
      Console::WriteLine( "IMethodCallMessage*" );
   }

   if ( dynamic_cast<IMethodReturnMessage^>(myMessage) )
   {
      Console::WriteLine( "IMethodReturnMessage*" );
   }

   if ( dynamic_cast<IConstructionCallMessage^>(myMessage) )
   {
      // Initialize a new instance of remote object
      IConstructionReturnMessage^ myIConstructionReturnMessage = this->InitializeServerObject( static_cast<IConstructionCallMessage^>(myMessage) );
      ConstructionResponse^ constructionResponse = gcnew ConstructionResponse( nullptr,static_cast<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 = dynamic_cast<IMethodReturnMessage^>(returnMessage);
   return returnMessage;
}
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;
}
Public Overrides Function Invoke(myMessage As IMessage) As IMessage
   Console.WriteLine("MyProxy 'Invoke method' Called...")
   If TypeOf myMessage Is IMethodCallMessage Then
      Console.WriteLine("IMethodCallMessage")
   End If
   If TypeOf myMessage Is IMethodReturnMessage Then
      Console.WriteLine("IMethodReturnMessage")
   End If
   If TypeOf myMessage Is IConstructionCallMessage Then
      ' Initialize a new instance of remote object
      Dim myIConstructionReturnMessage As IConstructionReturnMessage = _
            Me.InitializeServerObject(CType(myMessage, IConstructionCallMessage))
      Dim constructionResponse As _
            New ConstructionResponse(Nothing, CType(myMessage, IMethodCallMessage))
      Return constructionResponse
   End If
   Dim myIDictionary As IDictionary = myMessage.Properties
   Dim returnMessage As IMessage
   myIDictionary("__Uri") = myUri
   ' Synchronously dispatch messages to server.
   returnMessage = ChannelServices.SyncDispatchMessage(myMessage)
   ' Pushing return value and OUT parameters back onto stack.
   Dim myMethodReturnMessage As IMethodReturnMessage = _
         CType(returnMessage, IMethodReturnMessage)
   Return returnMessage
End Function 'Invoke

Комментарии

При вызове прозрачного прокси-сервера, поддерживаемого RealProxy , он делегирует вызовы методу Invoke . Метод Invoke преобразует сообщение в msg параметре в IMethodCallMessageи отправляет его удаленному объекту, представленному текущим экземпляром RealProxy.

Параметр IMessage предоставляет словарь через IMessage.Properties свойство . Словарь содержит пары "имя-значение" сведений о вызове метода, таких как имя вызываемого метода и его параметры.

Применяется к