2016-04-28 13 views
6

Per favore, indicarmi se esistono metodi diretti per eseguire Orleans ospitato all'interno del servizio Windows. Se non ci sono metodi diretti, allora ci sono metodi indiretti per farlo?È possibile eseguire Orleans ospitato all'interno del servizio Windows

Grazie in anticipo

+0

Stai cercando di non scrivere alcun codice? – BozoJoe

+0

@BozoJoe, in effetti sì. Ma per quanto ne so, non esiste una funzionalità integrata per questo. Ho anche prestato maggiore attenzione al progetto di test/dev host in Visual Studio e ora mi sembra che il codice sarà simile a quello utilizzato per eseguire Orleans all'interno dello stesso processo nell'AppDomain aggiuntivo. – Rauf

risposta

8

Ecco un campione basato topshelf. riferimento 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; 
    } 
} 
Problemi correlati