2016-04-28 4 views
6

Пожалуйста, укажите, есть ли какие-либо прямые методы для запуска Орлеана, размещенного в службе Windows. Если прямых методов нет, то есть ли какие-либо косвенные методы этого?Возможно ли запустить Orleans в службе Windows?

Спасибо заранее

+0

вы хотите не писать код? – BozoJoe

+0

@BozoJoe, действительно да. Но, насколько мне известно, для этого нет встроенной функции. Я также обратил больше внимания на проект test/dev host в visual studio, и теперь мне кажется, что код будет таким же, как тот, который использовался для запуска Orleans в рамках одного процесса в дополнительном AppDomain. – Rauf

ответ

8

Вот 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; 
    } 
} 
Смежные вопросы