Is it possible to run Orleans hosted within Windows Service

后端 未结 1 1289
情歌与酒
情歌与酒 2021-02-09 09:57

Please, point me out if there are any direct methods to run Orleans hosted within Windows Service. If there are no direct methods, then are there any indirect methods of doing t

相关标签:
1条回答
  • 2021-02-09 10:24

    Note: this is for v1.x Orleans. 2.x configuration changed quite a bit

    Here's a topshelf based sample. referencing https://github.com/migrap/Topshelf.Orleans

    static void Main()
    {
        HostFactory.Run(c => {
            c.Service<OrleansService>(s => {
                s.ConstructUsing(sc => {
                    sc.ConfigFileName("OrleansConfiguration.xml");
    
                    //do some config at runtime if you want
                    //sc.DeploymentId("blachblahc");
    
                });
    
                s.WhenStarted((service, control) => service.Start());
                s.WhenStopped((service, control) => service.Stop());
            });
    
            c.RunAsLocalSystem();
            c.UseAssemblyInfoForServiceInfo();
            c.SetServiceName("OrleansSiloHostService");
            c.StartAutomaticallyDelayed();
        });
    }
    
    public class OrleansService
    {
        private readonly SiloHost host;
        private Task startup;
    
        internal OrleansService(SiloHost silohost)
        { host = silohost; }
    
        public bool Start()
        {
            host.LoadOrleansConfig();
            host.InitializeOrleansSilo();
            startup = Task.Factory.StartNew(() =>
            {
                return host.StartOrleansSilo();
            });
            return true;
        }
    
        public bool Stop()
        {
            if (startup.Status == TaskStatus.RanToCompletion)
            { host.ShutdownOrleansSilo(); }
            return true;
        }
    }
    
    0 讨论(0)
提交回复
热议问题