7

Windows サービス内でホストされている Orleans を直接実行する方法があれば教えてください。直接的な方法がない場合、それを行う間接的な方法はありますか?

前もって感謝します

4

1 に答える 1

8

注: これは v1.x Orleans 用です。2.x 構成はかなり変更されました

これはトップシェルフ ベースのサンプルです。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 に答える