2016-04-28 110 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; 
    } 
} 
相關問題