Ce que je suis en train d'accomplir est juste que: Run Silo et le client dans le même AppDomainComment exécuter Microsoft Orleans Silo et le client dans le même AppDomain
utilisant des tutoriels de tout d'Orléans va parfaitement:
static void Main(string[] args)
{
AppDomain hostDomain = AppDomain.CreateDomain("OrleansHost", null,
new AppDomainSetup()
{
AppDomainInitializer = InitSilo
});
DoSomeClientWork();
hostDomain.DoCallBack(ShutdownSilo);
}
static void InitSilo(string[] args)
{
siloHost = new SiloHost(System.Net.Dns.GetHostName())
{
ConfigFileName = "SiloConfiguration.xml"
};
siloHost.InitializeOrleansSilo();
var startedok = siloHost.StartOrleansSilo(); //Works perfectly
if (!startedok)
throw new SystemException(String.Format("Failed to start Orleans silo '{0}' as a {1} node", siloHost.Name, siloHost.Type));
}
static void DoSomeClientWork()
{
var config = Orleans.Runtime.Configuration.ClientConfiguration.LocalhostSilo(30000);
GrainClient.Initialize(config);
var friend = GrainClient.GrainFactory.GetGrain<IHello>(0);
var result = friend.SayHello("Goodbye").Result;
Console.WriteLine(result);
}
les problèmes viennent quand je veux utiliser le même AppDomain:
static void Main(string[] args)
{
//Same AppDomain
Task.Run(() => InitSilo());
DoSomeClientWork(); //This is changed to await/retry until the Silo is Up
ShutdownSilo();
}
Pourquoi je suis tryin g pour suivre ce chemin: L'idée est d'empêcher que le client ne sorte et ne revienne sur le réseau car il fonctionne sur la même machine. Cela génère un surcoût dû à l'activité réseau. Donc j'essaie d'éviter cette surcharge.
Bien sûr, dans le cas où le silo local est en panne, le client doit sortir à travers le réseau afin de trouver un silo disponible.
Ce qui rend la chose trop compliquée est le fait que je ne peux pas voir une erreur utile, juste des erreurs et quelques erreurs de référence de la bibliothèque ne trouve pas.
Le code original a été simplifié juste pour éviter l'obtenir sale, mais si vous sentez que vous avez besoin de voir ce que je l'ai fait jusqu'à présent, juste faites-moi savoir. Toute aide, recommandation ou suggestion est utile.
avez-vous pensé à utiliser le bootstrapper? https://dotnet.github.io/orleans/Documentation/Advanced-Concepts/Application-Bootstrap-within-a-Silo.html – BozoJoe
Oui, c'est une autre option à laquelle je pense car je n'arrive pas à trouver un moyen de accomplir ce que je veux. –
Je suppose que la question est ... quel genre de travail le client fait-il? – BozoJoe