IMethodMessage Interface
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Définit l'interface de message de méthode.
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
- Dérivé
- Attributs
- Implémente
Exemples
L’exemple de code suivant montre un proxy personnalisé qui remplace RealProxy.Invoke
afin d’écrire les informations de message dans la console et de retourner immédiatement sans passer d’appel à distance.
// 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
Remarques
Un message de méthode est utilisé pour envoyer des informations à et à partir de méthodes distantes. Par exemple, les messages utilisés pour les appels de méthode distante implémentent l’interface IMethodMessage .
Propriétés
ArgCount |
Obtient le nombre d'arguments passés à la méthode. |
Args |
Obtient un tableau d'arguments passés à la méthode. |
HasVarArgs |
Obtient une valeur indiquant si le message a un nombre variable d'arguments. |
LogicalCallContext |
Obtient LogicalCallContext pour l'appel de méthode en cours. |
MethodBase |
Obtient le MethodBase de la méthode appelée. |
MethodName |
Obtient le nom de la méthode appelée. |
MethodSignature |
Obtient un objet contenant la signature de la méthode. |
Properties |
Obtient un IDictionary qui représente une collection des propriétés du message. (Hérité de IMessage) |
TypeName |
Obtient le nom Type complet de l'objet spécifique auquel l'appel est destiné. |
Uri |
Obtient l'URI de l'objet spécifique auquel l'appel est destiné. |
Méthodes
GetArg(Int32) |
Obtient un argument spécifique sous forme de Object. |
GetArgName(Int32) |
Obtient le nom de l'argument passé à la méthode. |