2016-04-28 33 views
6

Proszę wskazać, czy istnieją jakieś bezpośrednie metody uruchamiania Orleans obsługiwanych w ramach usługi systemu Windows. Jeśli nie ma bezpośrednich metod, to czy są jakieś pośrednie metody robienia tego?Czy można uruchomić Orleans obsługiwany w ramach usługi Windows

Z góry dziękuję

+0

szukasz nie pisać żadnego kodu? – BozoJoe

+0

@BozoJoe, właściwie tak. Ale według mojej wiedzy nie ma w tym wbudowanej funkcji. Zwróciłem także większą uwagę na projekt hosta test/dev w visual studio i wydaje mi się, że teraz kod będzie podobny do tego, który był używany do uruchomienia Orleans w ramach tego samego procesu w dodatkowej AppDomain. – Rauf

Odpowiedz

8

Oto próbka oparta na górnej półce. przedstawieniu 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; 
    } 
} 
Powiązane problemy