IMethodMessage インターフェイス
メソッド メッセージのインターフェイスを定義します。
この型のすべてのメンバの一覧については、IMethodMessage メンバ を参照してください。
System.Runtime.Remoting.Messaging.IMessage
System.Runtime.Remoting.Messaging.IMethodMessage
Public Interface IMethodMessage
Inherits IMessage
[C#]
public interface IMethodMessage : IMessage
[C++]
public __gc __interface IMethodMessage : public IMessage
[JScript]
public interface IMethodMessage implements IMessage
IMethodMessage を実装するクラス
クラス | 説明 |
---|---|
ReturnMessage | リモート オブジェクトに対するメソッド呼び出しへの応答として返されるメッセージを保持します。 |
解説
メソッド メッセージは、リモートのメソッドに情報を送信したり、リモートのメソッドから情報を受信したりするために使用します。たとえば、リモートのメソッド呼び出しに使用されるメッセージは、 IMethodMessage インターフェイスを実装します。
使用例
[Visual Basic, C#, C++] RealProxy.Invoke をオーバーライドして、メッセージの情報をコンソールに書き込むカスタム プロキシについては、次のコード例を参照してください。この例では、リモート呼び出しを実行せずすぐに制御を戻します。
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 'New
' 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 'MyProxyClass
[C#]
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;
}
}
[C++]
public __gc class MyProxyClass : public RealProxy
{
private:
Object* myObjectInstance;
private:
Type* myType;
public:
MyProxyClass(Type* argType) : RealProxy(argType)
{
myType = argType;
myObjectInstance = Activator::CreateInstance(argType);
}
// Overriding the Invoke method of RealProxy.
public:
IMessage* Invoke(IMessage* message)
{
IMethodMessage* myMethodMessage = dynamic_cast<IMethodMessage*>(message);
Console::WriteLine(S"**** Begin Invoke ****");
Console::WriteLine(S"\tType is : {0}", myType);
Console::WriteLine(S"\tMethod name : {0}", myMethodMessage->MethodName);
for (int i=0; i < myMethodMessage->ArgCount; i++)
{
Console::WriteLine(S"\tArgName is : {0}", myMethodMessage->GetArgName(i));
Console::WriteLine(S"\tArgValue is: {0}", myMethodMessage->GetArg(i));
}
if (myMethodMessage->HasVarArgs)
Console::WriteLine(S"\t The method have variable arguments!!");
else
Console::WriteLine(S"\t The method does not have variable arguments!!");
// Dispatch the method call to the real Object*.
Object* returnValue = myType->InvokeMember(myMethodMessage->MethodName, BindingFlags::InvokeMethod, 0,
myObjectInstance, myMethodMessage->Args);
Console::WriteLine(S"**** End Invoke ****");
// Build the return message to pass back to the transparent proxy.
ReturnMessage* myReturnMessage = new ReturnMessage(returnValue, 0, 0, 0,
dynamic_cast<IMethodCallMessage*>(message));
return myReturnMessage;
}
};
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
名前空間: System.Runtime.Remoting.Messaging
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
アセンブリ: Mscorlib (Mscorlib.dll 内)