2016-04-28 98 views
6

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

谢谢你提前

+0

你是不是想写任何代码? – BozoJoe

+0

@BozoJoe,其实是的。但据我所知,没有内置的功能。我还特别关注visual studio中的test/dev主机项目,现在看来,代码将与在附加AppDomain中的相同进程中运行Orleans的代码非常相似。 – Rauf

回答

8

这是一个基于顶盖的示例。 参考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; 
    } 
} 
相关问题