RemotingServices.ExecuteMessage Méthode
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.
Établit une connexion à l'objet distant spécifié et exécute le IMethodCallMessage fourni sur celui-ci.
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
Paramètres
- target
- MarshalByRefObject
Objet distant dont vous souhaitez appeler la méthode.
- reqMsg
- IMethodCallMessage
Message d'appel de méthode pour la méthode de l'objet distant spécifié.
Retours
Réponse de la méthode distante.
- Attributs
Exceptions
L'appelant immédiat n'a pas d'autorisation d'accès à l'infrastructure.
La méthode a été appelée à partir d'un autre contexte que le contexte natif de l'objet.
Exemples
L’exemple de code suivant montre comment utiliser la méthode pour transférer des ExecuteMessage appels de méthode vers des objets distants.
[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
Remarques
La méthode actuelle est utilisée dans des cas spéciaux par le serveur pour transférer l’appel de méthode spécifié à un autre objet, éventuellement distant. Cette méthode ne peut être appelée que lorsque l’appelant se trouve dans le contexte approprié.