39 votes

Comment communiquer au mieux entre les AppDomains ?

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 ?

27voto

Michael Meadows Points 15277

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.

13voto

x0n Points 26002

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

10voto

notmii Points 89

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);
}

3voto

lvaneenoo Points 169

C'est juste une idée rapide, mais j'ai entendu dire que même pour la communication inter-domaine WCF serait l'approche recommandée, à partir de .NET 3.0 bien sûr. En fait, cela a du sens, car le remoting est juste une autre technologie enveloppée par WCF.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X