RemotingServices.ExecuteMessage Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Stellt eine Verbindung mit dem angegebenen Remoteobjekt her und führt die bereitgestellte IMethodCallMessage für dieses aus.
public:
static System::Runtime::Remoting::Messaging::IMethodReturnMessage ^ ExecuteMessage(MarshalByRefObject ^ target, System::Runtime::Remoting::Messaging::IMethodCallMessage ^ reqMsg);
public static System.Runtime.Remoting.Messaging.IMethodReturnMessage ExecuteMessage (MarshalByRefObject target, System.Runtime.Remoting.Messaging.IMethodCallMessage reqMsg);
[System.Security.SecurityCritical]
public static System.Runtime.Remoting.Messaging.IMethodReturnMessage ExecuteMessage (MarshalByRefObject target, System.Runtime.Remoting.Messaging.IMethodCallMessage reqMsg);
static member ExecuteMessage : MarshalByRefObject * System.Runtime.Remoting.Messaging.IMethodCallMessage -> System.Runtime.Remoting.Messaging.IMethodReturnMessage
[<System.Security.SecurityCritical>]
static member ExecuteMessage : MarshalByRefObject * System.Runtime.Remoting.Messaging.IMethodCallMessage -> System.Runtime.Remoting.Messaging.IMethodReturnMessage
Public Shared Function ExecuteMessage (target As MarshalByRefObject, reqMsg As IMethodCallMessage) As IMethodReturnMessage
Parameter
- target
- MarshalByRefObject
Das Remoteobjekt, dessen Methode Sie aufrufen möchten.
- reqMsg
- IMethodCallMessage
Die Meldung für einen Methodenaufruf an die Methode des angegebenen Remoteobjekts.
Gibt zurück
Die Antwort der Remotemethode.
- Attribute
Ausnahmen
Der direkte Aufrufer verfügt nicht über die Berechtigung für die Infrastruktur.
Die Methode wurde nicht aus dem systemeigenen Kontext des Objekts aufgerufen.
Beispiele
Im folgenden Codebeispiel wird veranschaulicht, wie die ExecuteMessage -Methode verwendet wird, um Methodenaufrufe an Remoteobjekte weiterzuleiten.
[System::Security::Permissions::SecurityPermissionAttribute
(System::Security::Permissions::SecurityAction::LinkDemand,
Flags=System::Security::Permissions::SecurityPermissionFlag::Infrastructure)]
virtual void ProcessMessageStart( IMessage^ requestMessage, bool /*bClientSide*/, bool /*bAsyncCall*/ )
{
Console::WriteLine( "\nProcessMessageStart" );
Console::WriteLine( "requestMessage = {0}", requestMessage );
try
{
Console::WriteLine( "SessionId = {0}.", RemotingServices::GetSessionIdForMethodMessage( dynamic_cast<IMethodMessage^>(requestMessage) ) );
}
catch ( InvalidCastException^ )
{
Console::WriteLine( "The requestMessage is not an IMethodMessage*." );
}
IMethodCallMessage^ requestMethodCallMessage;
try
{
requestMethodCallMessage = dynamic_cast<IMethodCallMessage^>(requestMessage);
// Prints the details of the IMethodCallMessage* to the console.
Console::WriteLine( "\nMethodCall details" );
Console::WriteLine( "Uri = {0}", requestMethodCallMessage->Uri );
Console::WriteLine( "TypeName = {0}", requestMethodCallMessage->TypeName );
Console::WriteLine( "MethodName = {0}", requestMethodCallMessage->MethodName );
Console::WriteLine( "ArgCount = {0}", requestMethodCallMessage->ArgCount );
Console::WriteLine( "MethodCall::Args" );
IEnumerator^ myEnum = requestMethodCallMessage->Args->GetEnumerator();
while ( myEnum->MoveNext() )
{
Object^ o = safe_cast<Object^>(myEnum->Current);
Console::WriteLine( "\t {0}", o );
// Sends this method call message to another server to replicate
// the call at the second server.
if ( requestMethodCallMessage->Uri == replicatedServiceUri )
{
String^ repSvr = String::Format( "{0}{1}", const_cast<String^>(replicationServerUrl), const_cast<String^>(replicatedServiceUri) );
SampleService^ replicationService = dynamic_cast<SampleService^>(Activator::GetObject( SampleService::typeid, repSvr ));
IMethodReturnMessage^ returnMessage = RemotingServices::ExecuteMessage( replicationService, requestMethodCallMessage );
// Prints the results of the method call stored in the IMethodReturnMessage*.
Console::WriteLine( "\nMessage returned by ExecuteMessage." );
Console::WriteLine( "\tException = {0}", returnMessage->Exception );
Console::WriteLine( "\tReturnValue = {0}", returnMessage->ReturnValue );
Console::WriteLine( "\tOutArgCount = {0}", returnMessage->OutArgCount );
Console::WriteLine( "Return message OutArgs" );
IEnumerator^ myEnum = requestMethodCallMessage->Args->GetEnumerator();
while ( myEnum->MoveNext() )
{
Object^ o = safe_cast<Object^>(myEnum->Current);
Console::WriteLine( "\t {0}", o );
}
}
}
}
catch ( InvalidCastException^ )
{
Console::WriteLine( "The requestMessage is not a MethodCall" );
}
}
public void ProcessMessageStart(IMessage requestMessage, bool bClientSide, bool bAsyncCall) {
Console.WriteLine("\nProcessMessageStart");
Console.WriteLine("requestMessage = {0}", requestMessage);
try {
Console.WriteLine("SessionId = {0}.",
RemotingServices.GetSessionIdForMethodMessage((IMethodMessage)requestMessage));
}
catch (InvalidCastException) {
Console.WriteLine("The requestMessage is not an IMethodMessage.");
}
IMethodCallMessage requestMethodCallMessage;
try {
requestMethodCallMessage = (IMethodCallMessage)requestMessage;
// Prints the details of the IMethodCallMessage to the console.
Console.WriteLine("\nMethodCall details");
Console.WriteLine("Uri = {0}", requestMethodCallMessage.Uri);
Console.WriteLine("TypeName = {0}", requestMethodCallMessage.TypeName);
Console.WriteLine("MethodName = {0}", requestMethodCallMessage.MethodName);
Console.WriteLine("ArgCount = {0}", requestMethodCallMessage.ArgCount);
Console.WriteLine("MethodCall.Args");
foreach(object o in requestMethodCallMessage.Args)
Console.WriteLine("\t{0}", o);
// Sends this method call message to another server to replicate
// the call at the second server.
if (requestMethodCallMessage.Uri == replicatedServiceUri) {
SampleService replicationService =
(SampleService)Activator.GetObject(typeof(SampleService),
replicationServerUrl + replicatedServiceUri);
IMethodReturnMessage returnMessage =
RemotingServices.ExecuteMessage(replicationService, requestMethodCallMessage);
// Prints the results of the method call stored in the IMethodReturnMessage.
Console.WriteLine("\nMessage returned by ExecuteMessage.");
Console.WriteLine("\tException = {0}", returnMessage.Exception);
Console.WriteLine("\tReturnValue = {0}", returnMessage.ReturnValue);
Console.WriteLine("\tOutArgCount = {0}", returnMessage.OutArgCount);
Console.WriteLine("Return message OutArgs");
foreach(object o in requestMethodCallMessage.Args)
Console.WriteLine("\t{0}", o);
}
}
catch (InvalidCastException) {
Console.WriteLine("The requestMessage is not a MethodCall");
}
}
<SecurityPermission(SecurityAction.LinkDemand, Flags := SecurityPermissionFlag.Infrastructure)> _
Public Sub ProcessMessageStart(requestMessage As IMessage, bClientSide As Boolean, bAsyncCall As Boolean) Implements IDynamicMessageSink.ProcessMessageStart
Console.WriteLine(ControlChars.Cr + "ProcessMessageStart")
Console.WriteLine("requestMessage = {0}", requestMessage)
Try
Console.WriteLine("SessionId = {0}.", RemotingServices.GetSessionIdForMethodMessage(CType(requestMessage, IMethodMessage)))
Catch e As InvalidCastException
Console.WriteLine("The requestMessage is not an IMethodMessage.")
End Try
Dim requestMethodCallMessage As IMethodCallMessage
Try
requestMethodCallMessage = CType(requestMessage, MethodCall)
' Prints the details of the IMethodCallMessage to the console
Console.WriteLine(ControlChars.Cr + "MethodCall details")
Console.WriteLine("Uri = {0}", requestMethodCallMessage.Uri)
Console.WriteLine("TypeName = {0}", requestMethodCallMessage.TypeName)
Console.WriteLine("MethodName = {0}", requestMethodCallMessage.MethodName)
Console.WriteLine("ArgCount = {0}", requestMethodCallMessage.ArgCount)
Console.WriteLine("MethodCall.Args")
Dim o As Object
For Each o In requestMethodCallMessage.Args
Console.WriteLine(ControlChars.Tab + "{0}", o)
Next o
' Sends this method call message to another server to replicate
' the call at the second server
If requestMethodCallMessage.Uri = replicatedServiceUri Then
Dim replicationService As SampleService = CType(Activator.GetObject(GetType(SampleService), replicationServerUrl + replicatedServiceUri), SampleService)
Dim returnMessage As IMethodReturnMessage = RemotingServices.ExecuteMessage(replicationService, requestMethodCallMessage)
' Prints the results of the method call stored in the IMethodReturnMessage.
Console.WriteLine(ControlChars.Cr + "Message returned by ExecuteMessage.")
Console.WriteLine(ControlChars.Tab + "Exception = {0}", returnMessage.Exception)
Console.WriteLine(ControlChars.Tab + "ReturnValue = {0}", returnMessage.ReturnValue)
Console.WriteLine(ControlChars.Tab + "OutArgCount = {0}", returnMessage.OutArgCount)
Console.WriteLine("Return message OutArgs")
For Each o In requestMethodCallMessage.Args
Console.WriteLine(ControlChars.Tab + "{0}", o)
Next o
End If
Catch e As InvalidCastException
Console.WriteLine("The requestMessage is not a MethodCall")
End Try
End Sub
Hinweise
Die aktuelle Methode wird in besonderen Fällen vom Server verwendet, um den angegebenen Methodenaufruf an ein anderes, möglicherweise Remoteobjekt weiterzuleiten. Diese Methode kann nur aufgerufen werden, wenn sich der Aufrufer im entsprechenden Kontext befindet.