RealProxy.Invoke メソッド
派生クラスでオーバーライドされた場合は、提供された IMessage で指定されたメソッドを、現在のインスタンスが表すリモート オブジェクトで呼び出します。
Public MustOverride Function Invoke( _
ByVal msg As IMessage _) As IMessage
[C#]
public abstract IMessage Invoke(IMessagemsg);
[C++]
public: virtual IMessage* Invoke(IMessage* msg) = 0;
[JScript]
public abstract function Invoke(
msg : IMessage) : IMessage;
パラメータ
- msg
メソッドの呼び出しに関する情報の IDictionary を格納している IMessage 。
戻り値
呼び出されたメソッドが返すメッセージで、 out パラメータまたは ref パラメータのどちらかと戻り値を格納しているメッセージ。
解説
RealProxy によって回復された透過プロキシが呼び出されると、透過プロキシはこの呼び出しを Invoke メソッドにデリゲートします。 Invoke メソッドは、 msg パラメータのメッセージを IMethodCallMessage に変換し、 RealProxy の現在のインスタンスで表されるリモート オブジェクトに送信します。
IMessage パラメータは、 IMessage.Properties プロパティを使用してディクショナリを提供します。ディクショナリは、呼び出されたメソッドの名前やそのパラメータなど、メソッドの呼び出しに関する情報の名前/値ペアを格納しています。
使用例
Public Overrides Function Invoke(myMessage As IMessage) As IMessage
Console.WriteLine("MyProxy 'Invoke method' Called...")
If TypeOf myMessage Is IMethodCallMessage Then
Console.WriteLine("IMethodCallMessage")
End If
If TypeOf myMessage Is IMethodReturnMessage Then
Console.WriteLine("IMethodReturnMessage")
End If
If TypeOf myMessage Is IConstructionCallMessage Then
' Initialize a new instance of remote object
Dim myIConstructionReturnMessage As IConstructionReturnMessage = _
Me.InitializeServerObject(CType(myMessage, IConstructionCallMessage))
Dim constructionResponse As _
New ConstructionResponse(Nothing, CType(myMessage, IMethodCallMessage))
Return constructionResponse
End If
Dim myIDictionary As IDictionary = myMessage.Properties
Dim returnMessage As IMessage
myIDictionary("__Uri") = myUri
' Synchronously dispatch messages to server.
returnMessage = ChannelServices.SyncDispatchMessage(myMessage)
' Pushing return value and OUT parameters back onto stack.
Dim myMethodReturnMessage As IMethodReturnMessage = _
CType(returnMessage, IMethodReturnMessage)
Return returnMessage
End Function 'Invoke
[C#]
public override IMessage Invoke(IMessage myMessage)
{
Console.WriteLine("MyProxy 'Invoke method' Called...");
if (myMessage is IMethodCallMessage)
{
Console.WriteLine("IMethodCallMessage");
}
if (myMessage is IMethodReturnMessage)
{
Console.WriteLine("IMethodReturnMessage");
}
if (myMessage is IConstructionCallMessage)
{
// Initialize a new instance of remote object
IConstructionReturnMessage myIConstructionReturnMessage =
this.InitializeServerObject((IConstructionCallMessage)myMessage);
ConstructionResponse constructionResponse = new
ConstructionResponse(null,(IMethodCallMessage) myMessage);
return constructionResponse;
}
IDictionary myIDictionary = myMessage.Properties;
IMessage returnMessage;
myIDictionary["__Uri"] = myUri;
// Synchronously dispatch messages to server.
returnMessage = ChannelServices.SyncDispatchMessage(myMessage);
// Pushing return value and OUT parameters back onto stack.
IMethodReturnMessage myMethodReturnMessage = (IMethodReturnMessage)returnMessage;
return returnMessage;
}
[C++]
public:
IMessage* Invoke(IMessage* myMessage)
{
Console::WriteLine(S"MyProxy 'Invoke method' Called...");
if (dynamic_cast<IMethodCallMessage*>(myMessage))
{
Console::WriteLine(S"IMethodCallMessage*");
}
if (dynamic_cast<IMethodReturnMessage*>(myMessage))
{
Console::WriteLine(S"IMethodReturnMessage*");
}
if (dynamic_cast<IConstructionCallMessage*>(myMessage))
{
// Initialize a new instance of remote Object*
IConstructionReturnMessage* myIConstructionReturnMessage =
this->InitializeServerObject(static_cast<IConstructionCallMessage*>(myMessage));
ConstructionResponse* constructionResponse = new ConstructionResponse(0, static_cast<IMethodCallMessage*>(myMessage));
return constructionResponse;
}
IDictionary* myIDictionary = myMessage->Properties;
IMessage* returnMessage;
myIDictionary->Item[S"__Uri"] = myUri;
// Synchronously dispatch messages to server.
returnMessage = ChannelServices::SyncDispatchMessage(myMessage);
// Pushing return value and OUT parameters back onto stack.
IMethodReturnMessage* myMethodReturnMessage = dynamic_cast<IMethodReturnMessage*>(returnMessage);
return returnMessage;
}
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
参照
RealProxy クラス | RealProxy メンバ | System.Runtime.Remoting.Proxies 名前空間