【问题标题】:Self hosted web api on windows service permissions关于 Windows 服务权限的自托管 Web api
【发布时间】:2015-11-23 08:11:15
【问题描述】:

我在我的 Windows 服务中托管 Web Api,我在从 Windows 服务启动 Web Api 服务时遇到问题,这是我在调试时遇到的异常:

发生 System.AggregateException HResult=-2146233088 消息=发生一个或多个错误。来源=mscorlib 堆栈跟踪: ....内部异常: H结果=-2146233087 消息=HTTP 无法注册 URL http://+:1243/。您的进程没有对此命名空间的访问权限(请参阅 http://go.microsoft.com/fwlink/?LinkId=70353 了解详情)。 来源=System.ServiceModel.Internals ......

如果我在控制台应用程序中托管相同的 Web 服务,那么一切正常。如何设置 Windows 服务启动 Web 服务的权限?

提前谢谢...

【问题讨论】:

  • 这可能与当前用户有关:当您运行控制台应用程序时,当前用户就是您(也许您具有“高”权限。运行服务时,用户是其他人(通常是 LocalService 或网络服务)
  • 是的,我的服务作为 LocalService 帐户运行,但我不想将其帐户更改为用户 - 因为每次进程运行时用户都需要输入凭据...是否有一种为在 LocalService 帐户下运行的服务设置“高”权限的方法?
  • 这不是真的:您无法在服务启动时指定用户名和密码,您必须使用例如设置它控制面板->服务->属性->连接。但无论如何我都不会使用真正的用户,它会带来更多的问题而不是好处。例如,当用户更改密码时,服务将无法启动。尝试使用不同的内置用户(也许网络服务有足够的权限来满足您的需要)
  • 更改为 NetworkService 服务也没有帮助,当我启动服务时仍然出现此异常... :(

标签: c# asp.net-web-api permissions windows-services self-hosting


【解决方案1】:

与在 IIS 下托管(它会为您处理)不同,在自托管时,您需要为您正在侦听的 URL 以及您正在运行的用户创建一个 ACL。像这样的东西(来自特权命令行):-

netsh http add urlacl http://+:1234/ user=LocalService

我没有专门尝试过使用 LocalService 进行上述操作,但是在侦听 localhost 以外的任何内容时这是必需的。

更多信息here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 2015-04-16
    • 2021-10-04
    相关资源
    最近更新 更多