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

Col*_*dog 41 .net c# 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.");
}
Run Code Online (Sandbox Code Playgroud)

编辑 - 这是在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.
Run Code Online (Sandbox Code Playgroud)

Col*_*dog 17

看起来问题出在URL保留上.我不需要一个.如果存在URL保留,则只会阻止owin主机以拒绝访问错误启动.此外,owin主机的默认端口是5000.如果仍有一个"死"进程仍在该端口上运行,它将阻止您的服务启动.要检查您是否可以netstat -a -b在命令提示符下运行.

  • 在我的情况下,只有当我在代码中注册了与我在url = http:// localhost:1981 / (5认同)
  • 答案中最重要的部分是问题的*EDIT*部分,即更改URL ACL.你为什么不把这部分放在你的答案中呢?我赞成编辑的答案,因为这是本问答中的有趣信息 (2认同)

Mar*_* N. 5

您的服务正在(很可能)在LocalSystem(SYSTEM)帐户下运行.此帐户不在Everyone安全主体中.

简而言之,要解决此问题,请为匿名登录进行命名空间预留,或者将您的服务更改为在恰好位于Everyone主体中的网络服务帐户下运行.

当然,第三个选项是创建新的本地/域用户,为其创建预留并在此帐户下运行服务.但是你必须担心为它设置适当的安全权限,所以我会选择前两个选项之一.


小智 5

在管理员下运行此命令行

netsh http 添加 urlacl url=http://*:8080/ user=MyUser