我在工作中使用topShelf写了一个Nancy Self-Hosted服务(Windows 7),它运行得很好。我把它带回家并在Windows 10下运行它,我得到以下错误:
Nancy self host无法启动,因为提供的url没有名称空间保留。
请在提供的HostConfiguration上启用UrlReservations.CreateAutomatically NancyHost,或使用(提升的)命令手动创建预订:
netsh http add urlacl url =“http:// +:5000 /”user =“Everyone”
我看到了这个建议:
HostConfiguration hostConfigs = new HostConfiguration()
{
UrlReservations = new UrlReservations() { CreateAutomatically = true }
};
但它似乎只能在运行自己的主机时运行,而不是使用TopShelf。这是我的主要代码:
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");
});
}
有人可以建议如何解决此问题,以便在Windows 10下运行吗?感谢...
更新: 以下工作正常:以管理员身份运行命令shell并输入以下内容似乎可以使一切正常。
netsh http add urlacl url=http://+:1234/ user=DOMAIN\username
其中1234是服务使用的端口。我仍然想知道如何在代码中执行此操作,但如果这不起作用,这就足够了。
答案 0 :(得分:5)
看看Topshelf.Nancy也可以作为NuGet包使用。它在您安装服务时为您执行URL保留(netsh http)。卸载服务时也会删除它。
您的代码:
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");
});
}