自托管OWIN Web API是否可以在非管理员帐户下运行?我已经尝试了几十个网址预订,没有任何作用。该服务无法以“访问被拒绝”开头。当帐户添加到管理员角色但我不想要它时,它可以工作。下面的代码在Win 7 framework 4.5.2上运行。
//install-package microsoft.owin.hosting
//install-package Microsoft.Owin.Host.HttpListener
StartOptions options = new StartOptions();
options.Urls.Add("http://localhost:5000/");
//options.Urls.Add(string.Format("http://{0}:5000", Environment.MachineName));
//options.Urls.Add("http://+:5000/");
//options.Urls.Add("http://*:5000/");
using (WebApp.Start<WebAPISelfHostMinimal.Startup>(options))
{
while (!Terminate)
{
await Task.Delay(10); //keep cpu from getting pegged
}
LogUtil.LogInfo("Terminating owin host.");
}
编辑 - 这是在Windows帐户下运行的。
C:\>netsh http add urlacl http://+:5000/ user=mini2012\svcAPI
URL reservation successfully added
C:\>sc start apiservice
[SC] StartService FAILED 5:
Access is denied.
C:\>netsh http add urlacl http://*:5000/ user=mini2012\svcAPI
URL reservation successfully added
C:\>sc start apiservice
[SC] StartService FAILED 5:
Access is denied.
C:\>netsh http add urlacl http://localhost:5000/ user=mini2012\svcAPI
URL reservation successfully added
C:\>sc start apiservice
[SC] StartService FAILED 5:
Access is denied.
答案 0 :(得分:16)
看起来问题出在URL保留上。我不需要一个。如果存在URL保留,则只会阻止owin主机以拒绝访问错误启动。此外,owin主机的默认端口是5000.如果有一个&#34;死&#34;仍在该端口上运行的进程,它将阻止您的服务启动。要检查您是否可以在命令提示符下运行netstat -a -b
。
答案 1 :(得分:5)
您的服务正在(很可能)在LocalSystem(SYSTEM)帐户下运行。此帐户不在Everyone安全主体中。
简而言之,要解决此问题,请为匿名登录进行命名空间预留,或者将您的服务更改为恰好位于Everyone主体中的网络服务帐户下运行。
当然,第三个选项是创建新的本地/域用户,为其创建预留并在此帐户下运行服务。但是,您必须担心为其设置适当的安全权限,因此我选择前两个选项之一。
答案 2 :(得分:3)
对于正在寻找解决方案但没有阅读文字的人。
解决方案是以管理员身份运行Visual Studio。
答案 3 :(得分:0)
在admin下运行此命令行
netsh http add urlacl url = http:// *:8080 / user = MyUser
答案 4 :(得分:-1)
端口值大于等于5000不需要管理员权限