在非管理员帐户下运行自托管OWIN Web API

时间:2014-07-26 23:23:47

标签: c# .net asp.net-web-api owin

自托管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.

5 个答案:

答案 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不需要管理员权限