7

请指出我是否有任何直接方法可以运行 Windows 服务中托管的 Orleans。如果没有直接的方法,那么有没有间接的方法呢?

先感谢您

4

1 回答 1

8

注意:这是针对 v1.x Orleans 的。2.x 配置改变了很多

这是一个基于topshelf的示例。参考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;
    }
}
于 2016-04-30T18:51:04.033 回答