2016-05-23 29 views
1

Ich schrieb eine Nancy Self-Hosted Service mit TopShelf bei der Arbeit (Windows 7) und es hat gut funktioniert. Ich habe es nach Hause gebracht und unter Windows 10 ausgeführt und erhalte folgende Fehlermeldung:Running Nancy Self Host unter TopShelf

Der Nancy-Selbsthost konnte nicht gestartet werden, da für die bereitgestellten URL (s) keine Namespace-Reservierung vorhanden war.

Bitte entweder aktivieren UrlReservations.CreateAutomatically auf dem HostConfiguration zu die NancyHost vorgesehen, oder erstellen Sie die Vorbehalte manuell mit der (erhöhten) Befehl (e):

netsh http hinzufügen urlacl url = "http: // + : 5000 /“user = "Jeden"

habe ich diesen Vorschlag:

HostConfiguration hostConfigs = new HostConfiguration() 
{ 
    UrlReservations = new UrlReservations() { CreateAutomatically = true } 
}; 

Aber es scheint, nur zu arbeiten, wenn sie Ihre eigene Host ausgeführt wird, nicht mit Topshelf. Hier ist mein Hauptcode:

public static void Main() 
    { 
     HostFactory.Run(x => 
     { 
      //x.UseLinuxIfAvailable(); 
      x.Service<SelfHost>(s => 
      { 
       s.ConstructUsing(name => new SelfHost()); 
       s.WhenStarted(tc => tc.Start()); 
       s.WhenStopped(tc => tc.Stop()); 
      }); 

      x.RunAsLocalSystem(); 
      x.SetDescription("SciData Recipe Data Interaction"); 
      x.SetDisplayName("SciData.Recipe Service"); 
      x.SetServiceName("SciData.Recipe"); 
     }); 
    } 

Kann jemand vorschlagen, wie dies zu beheben, so dass es unter Windows 10 läuft? Danke ...

UPDATE: Folgendes funktionierte: Ausführen einer Befehlsshell als Admin und Eingabe der folgenden scheint alles zu funktionieren.

netsh http add urlacl url=http://+:1234/ user=DOMAIN\username 

Wobei 1234 der Port ist, den der Dienst verwendet. Ich würde immer noch gerne herausfinden, wie man das im Code macht, aber wenn das nicht funktioniert, wird das ausreichen.

Antwort

3

Werfen Sie einen Blick auf Topshelf.Nancy auch als NuGet-Paket. Es macht die URL-Reservierung (netsh http) für Sie, wenn Sie den Service installieren. Es wird auch gelöscht, wenn der Dienst deinstalliert wird.

  1. hinzufügen Topshelf.Nancy zu einem Projekt
  2. hinzufügen "WithNancyEndpoint" zu Ihren Diensten

Ihr Code:

public static void Main() 
{ 
    HostFactory.Run(x => 
    { 
     //x.UseLinuxIfAvailable(); 
     x.Service<SelfHost>(s => 
     { 
      s.ConstructUsing(name => new SelfHost()); 
      s.WhenStarted(tc => tc.Start()); 
      s.WhenStopped(tc => tc.Stop()); 
      s.WithNancyEndpoint(x, c => 
      { 
       c.AddHost(port: 1234); 
       c.CreateUrlReservationsOnInstall(); 
      }); 
     }); 

     x.RunAsLocalSystem(); 
     x.SetDescription("SciData Recipe Data Interaction"); 
     x.SetDisplayName("SciData.Recipe Service"); 
     x.SetServiceName("SciData.Recipe"); 
    }); 
} 
+1

Danke, aber vielleicht wäre es wert sein, die Firewall zu erwähnen Option und die onuninstall Regel sowie nc.AddHost (Port: 8080); nc.CreateUrlReservationsOnInstall(); nc.DeleteReservationsOnUnInstall(); nc.OpenFirewallPortsOnInstall (firewallRuleName: "myservice"); nc.Bootstrapper = neuer Bootstrapper(); – Hairydruidy