Bonjour,

De façon résumée, je souhaite sérialiser des actions contenues dans une classe pour une exécution différée de celles-ci (voir le contexte et l'exemple plus bas pour ceux qui souhaitent).

Est-ce prévu par le framework? Un lien? Une idée? Une remarque?

Je suis preneur!

Merci d'avance.


Contexte :
Une application client/serveur implémentant le remoting permet d'envoyer des actions à des clients.
Interface :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
public interface IRemoteOperation
et les opérations de type :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
public class RemoteOperation : MarshalByRefObject, RemotingInterfaces.IRemoteOperation
Je peux par exemple envoyer une action au pc "pcName" sur le port "port' permettant de lancer un process :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
IRemoteOperation op = (RemotingInterfaces.IRemoteOperation)Activator.GetObject(
    typeof(RemotingInterfaces.IRemoteOperation),
    "tcp://" + pcName + ":"+port+"/RemoteOperation");
if (op.ProcessLaunch(tbx_ProcessToLaunch.Text,this.cbx_UseShellExecute.Checked,this.cbx_Impersonate.Checked))
{
    //OK action
}
else
{
    //failure action
}
la définition de ProcessLaunch étant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
bool ProcessLaunch(string processToLaunch, bool useShellExecute, bool mustImpersonate);
et renvoyant un booléen représentant que l'action s'est produite correctement sur le client.

Lorsque le client n'est pas disponible (pc éteint),
op.ProcessLaunch() lance une exception et l'action n'est évidemment pas exécutée. A ce moment, il faudrait que l'action n'ayant pas abouti se mette en attente (dans un fichier ou une DB) jusqu'à ce que le client exécute l'action.

Mon problème : je ne sais pas comment sérialiser une méthode et l'exécuter en différé.

points d'attention : nombre variable de paramètres dans les fonctions.

Encore merci.