Freigeben über


RealProxy.Invoke-Methode

Ruft beim Überschreiben in einer abgeleiteten Klasse die Methode auf, die in der bereitgestellten IMessage für das durch die aktuelle Instanz dargestellte Remoteobjekt angegeben ist.

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

Syntax

'Declaration
Public MustOverride Function Invoke ( _
    msg As IMessage _
) As IMessage
'Usage
Dim instance As RealProxy
Dim msg As IMessage
Dim returnValue As IMessage

returnValue = instance.Invoke(msg)
public abstract IMessage Invoke (
    IMessage msg
)
public:
virtual IMessage^ Invoke (
    IMessage^ msg
) abstract
public abstract IMessage Invoke (
    IMessage msg
)
public abstract function Invoke (
    msg : IMessage
) : IMessage

Parameter

Rückgabewert

Die Meldung, die von der aufgerufenen Methode zurückgegeben wird und die den Rückgabewert sowie alle out-Parameter oder ref-Parameter enthält.

Hinweise

Wenn der vom RealProxy unterstützte transparente Proxy aufgerufen wird, delegiert er die Aufrufe an die Invoke-Methode. Die Invoke-Methode transformiert die Meldung im msg-Parameter in eine IMethodCallMessage und sendet sie an das Remoteobjekt, das durch die aktuelle Instanz von RealProxy dargestellt wird.

Der IMessage-Parameter stellt über die IMessage.Properties-Eigenschaft ein Wörterbuch bereit. Das Wörterbuch enthält Name-Wert-Paare mit Informationen über den Methodenaufruf, z. B. den Namen der aufgerufenen Methode und deren Parameter.

Beispiel

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
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;
}
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;
}

Plattformen

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

Siehe auch

Referenz

RealProxy-Klasse
RealProxy-Member
System.Runtime.Remoting.Proxies-Namespace