IMethodMessage IMethodMessage IMethodMessage IMethodMessage Interface

Definizione

Definisce l'interfaccia del messaggio del metodo.Defines the method message interface.

public interface class IMethodMessage : System::Runtime::Remoting::Messaging::IMessage
[System.Runtime.InteropServices.ComVisible(true)]
public interface IMethodMessage : System.Runtime.Remoting.Messaging.IMessage
type IMethodMessage = interface
    interface IMessage
Public Interface IMethodMessage
Implements IMessage
Derivato
Attributi
Implementazioni

Esempi

Il codice di esempio seguente mostra un proxy personalizzato che RealProxy.Invoke esegue l'override di per scrivere le informazioni sul messaggio nella console e restituire immediatamente un risultato senza effettuare una chiamata remota.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;
   }
};
[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));
      }

      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, 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)
      MyBase.New(argType)
      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!!")
      Else
         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

Commenti

Viene utilizzato un messaggio di metodo per inviare informazioni a e da metodi remoti.A method message is used to send information to and from remote methods. Ad esempio, i messaggi utilizzati per le chiamate al metodo IMethodMessage remoto implementano l'interfaccia.For example, messages used for remote method calls implement the IMethodMessage interface.

Proprietà

ArgCount ArgCount ArgCount ArgCount

Ottiene il numero di argomenti passati al metodo.Gets the number of arguments passed to the method.

Args Args Args Args

Ottiene una matrice di argomenti passati al metodo.Gets an array of arguments passed to the method.

HasVarArgs HasVarArgs HasVarArgs HasVarArgs

Ottiene un valore che indica se il messaggio contiene argomenti variabili.Gets a value indicating whether the message has variable arguments.

LogicalCallContext LogicalCallContext LogicalCallContext LogicalCallContext

Ottiene l'oggetto LogicalCallContext per la chiamata di metodo corrente.Gets the LogicalCallContext for the current method call.

MethodBase MethodBase MethodBase MethodBase

Ottiene l'oggetto MethodBase del metodo chiamato.Gets the MethodBase of the called method.

MethodName MethodName MethodName MethodName

Ottiene il nome del metodo richiamato.Gets the name of the invoked method.

MethodSignature MethodSignature MethodSignature MethodSignature

Ottiene un oggetto contenente la firma del metodo.Gets an object containing the method signature.

Properties Properties Properties Properties

Ottiene un IDictionary che rappresenta un insieme di proprietà del messaggio.Gets an IDictionary that represents a collection of the message's properties.

(Inherited from IMessage)
TypeName TypeName TypeName TypeName

Ottiene il nome Type completo dell'oggetto specifico a cui è destinata la chiamata.Gets the full Type name of the specific object that the call is destined for.

Uri Uri Uri Uri

Ottiene l'URI dell'oggetto specifico a cui è destinata la chiamata.Gets the URI of the specific object that the call is destined for.

Metodi

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

Ottiene un argomento specifico come Object.Gets a specific argument as an Object.

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

Ottiene il nome dell'argomento passato al metodo.Gets the name of the argument passed to the method.

Si applica a