J'ai une application qui a besoin d'envoyer un volume modérément élevé de messages entre un certain nombre d'AppDomains. Je sais que je pourrais mettre cela en œuvre en utilisant le remoting, mais j'ai également remarqué qu'il existe des délégués inter-domaines. Quelqu'un s'est-il penché sur ce type de problème ?
Réponses
Trop de publicités?J'ai eu un bon succès en utilisant WCF avec une liaison de tuyaux nommés. L'utilisation de named pipes ne crée aucun trafic réseau et utilise un codage binaire, ce qui devrait être assez rapide sans sacrifier la capacité de distribution dans des scénarios de mise à l'échelle futurs.
EDIT : Voir ici pour des informations plus détaillées, notamment un lien vers un exemple de mise en œuvre.
Un délégué inter-domaines ne permet qu'une méthode void avec zéro paramètre, et ce n'est probablement pas ce que vous pensez. Il est à peine utile comme simple rappel à des fins de notification d'un domaine d'application à un autre, par exemple une méthode comme InitComplete() ou autre.
Le remoting est le SEUL choix, que vous l'appeliez WCF ou autre, en passant des types sérialisables ou en utilisant des types MBRO (MarshalByRefObjects). Ce n'est pas aussi difficile que vous le pensez.
-Oisin
Je viens de découvrir que vous pouvez également utiliser le AppDomain.SetData mais ce n'est qu'une façon de faire. Du domaine hôte au domaine enfant.
static void RunInChildDomain()
{
AppDomain childDomain = AppDomain.CreateDomain("friendlyName");
string parameterValue = "notmii";
childDomain.SetData("parameter", parameterValue);
childDomain.DoCallBack(PrintName);
}
static void PrintName()
{
string Name = Convert.ToString(AppDomain.CurrentDomain.GetData("parameter"));
Console.WriteLine(Name);
}