Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to run Orleans hosted within Windows Service

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 that?

Thank you in advance

like image 591
Rauf Avatar asked Apr 28 '16 21:04

Rauf


1 Answers

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;
    }
}
like image 78
BozoJoe Avatar answered Oct 20 '22 00:10

BozoJoe