IMethodMessage Interfaz
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Define la interfaz de mensajes de métodos.
public interface class IMethodMessage : System::Runtime::Remoting::Messaging::IMessage
public interface IMethodMessage : System.Runtime.Remoting.Messaging.IMessage
[System.Runtime.InteropServices.ComVisible(true)]
public interface IMethodMessage : System.Runtime.Remoting.Messaging.IMessage
type IMethodMessage = interface
interface IMessage
[<System.Runtime.InteropServices.ComVisible(true)>]
type IMethodMessage = interface
interface IMessage
Public Interface IMethodMessage
Implements IMessage
- Derivado
- Atributos
- Implementaciones
Ejemplos
En el código de ejemplo siguiente se muestra un proxy personalizado que invalida RealProxy.Invoke
para escribir la información del mensaje en la consola y devolver inmediatamente sin realizar una llamada remota.
// 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;
}
};
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
Comentarios
Se usa un mensaje de método para enviar información a y desde métodos remotos. Por ejemplo, los mensajes usados para las llamadas a métodos remotos implementan la IMethodMessage interfaz .
Propiedades
ArgCount |
Obtiene el número de argumentos pasados al método. |
Args |
Obtiene la matriz de argumentos pasados al método. |
HasVarArgs |
Obtiene un valor que indica si el mensaje contiene argumentos de variable. |
LogicalCallContext |
Obtiene el valor de LogicalCallContext para la llamada de método actual. |
MethodBase |
Obtiene el objeto MethodBase del método invocado. |
MethodName |
Obtiene el nombre del método invocado. |
MethodSignature |
Obtiene un objeto que contiene la firma del método. |
Properties |
Obtiene una IDictionary que representa una colección de propiedades de los mensajes. (Heredado de IMessage) |
TypeName |
Obtiene el nombre completo de Type del objeto específico al que se destina la llamada. |
Uri |
Obtiene la dirección URI del objeto específico al que se destina la llamada. |
Métodos
GetArg(Int32) |
Obtiene un argumento específico como un Object. |
GetArgName(Int32) |
Obtiene el nombre del argumento pasado al método. |