IMethodMessage Antarmuka
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Menentukan antarmuka pesan metode.
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
- Turunan
- Atribut
- Penerapan
Contoh
Contoh kode berikut menunjukkan proksi kustom yang mengambil alih RealProxy.Invoke
untuk menulis informasi pesan ke konsol dan segera kembali tanpa melakukan panggilan jarak jauh.
// 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
Keterangan
Pesan metode digunakan untuk mengirim informasi ke dan dari metode jarak jauh. Misalnya, pesan yang digunakan untuk panggilan metode jarak jauh mengimplementasikan IMethodMessage antarmuka.
Properti
ArgCount |
Mendapatkan jumlah argumen yang diteruskan ke metode . |
Args |
Mendapatkan array argumen yang diteruskan ke metode . |
HasVarArgs |
Mendapatkan nilai yang menunjukkan apakah pesan memiliki argumen variabel. |
LogicalCallContext |
LogicalCallContext Mendapatkan untuk panggilan metode saat ini. |
MethodBase |
MethodBase Mendapatkan dari metode yang dipanggil. |
MethodName |
Mendapatkan nama metode yang dipanggil. |
MethodSignature |
Mendapatkan objek yang berisi tanda tangan metode. |
Properties |
Mendapatkan yang IDictionary mewakili kumpulan properti pesan. (Diperoleh dari IMessage) |
TypeName |
Mendapatkan nama lengkap Type objek tertentu yang ditujukan untuk panggilan. |
Uri |
Mendapatkan URI objek tertentu yang ditujukan untuk panggilan. |
Metode
GetArg(Int32) |
Mendapatkan argumen tertentu sebagai Object. |
GetArgName(Int32) |
Mendapatkan nama argumen yang diteruskan ke metode . |