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

本文关键字:OWIN API Web 运行 管理员 | 更新日期: 2023-09-27 18:14:56

是否可以在非管理员帐户下运行自托管的OWIN Web API ?我已经尝试了几十个url预订,没有任何工作。服务启动失败,提示"拒绝访问"。当帐户添加到管理员角色时,它可以工作,但我不希望这样。下面的代码在win7框架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.");
}

EDIT -这是在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.

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

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

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

简而言之,要解决这个问题,要么为匿名登录保留名称空间,要么将您的服务更改为在Network service帐户下运行,该帐户恰好位于Everyone主体中。

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

在admin下运行命令行

netsh http add url=http://*:8080/user=MyUser