【问题标题】:Self-hosted REST API on localhost without administrative privileges本地主机上的自托管 REST API,无需管理权限
【发布时间】:2016-02-12 11:05:51
【问题描述】:

我想在我的 WPF 应用程序中实现一个简单的自托管 REST API,它侦听 localhost 上的特定端口。如果 WPF 应用程序正在运行,该 API 将被网站使用,以便与 WPF 应用程序进行通信。

没过多久我就遇到了 System.ServiceModel.AddressAccessDeniedException 错误。必须保留 URL,并且只有在进程以提升的权限运行时才能做到这一点。问题在于,该应用程序在数千家公司使用不同的 IT 策略,这使得该应用程序几乎不可能在每次启动时都需要管理权限。

这是我的测试代码:

    _task = Task.Factory.StartNew(() =>
    {
        var uri = new Uri("http://localhost:5000/test");
        var type = typeof (TestService);
        WebServiceHost host = new WebServiceHost(type, uri);
        WebHttpBinding binding = new WebHttpBinding();
        binding.CrossDomainScriptAccessEnabled = true;
        host.AddServiceEndpoint(type, binding, uri);
        host.Open();
    });

有没有办法解决这个问题?我可以使用任何 3rd 方包吗?或者我可以在安装应用程序期间保留 URL,因为安装需要提升的权限?或者这是一个死胡同?

【问题讨论】:

    标签: c# .net windows wcf self-hosting


    【解决方案1】:

    在安装过程中运行这个:

    netsh http add urlacl url=http://+:5000/Test/ user=Everyone
    

    请注意,您可以将 userEveryone 限制为登录用户,例如user=MyDomain\John

    【讨论】:

    • 可以 = 应该 :) 使用所需的最低权限来完成工作。至少对于非爱好项目:)
    • 它的工作,但不抗拒重启(不持久)...如何使持久?
    【解决方案2】:

    因为您尝试绑定到http://+:12345,所以您收到“拒绝访问”,其中+ 指的是机器上的所有地址。如果您明确绑定到localhost,那么(只要您使用未使用的端口号)您应该没有任何问题。

    自从我上次使用 WCF 已经有一段时间了,所以我不记得相关的咒语了。

    就个人而言,如果我这样做,我会调查类似NancyFX 的东西,它比 WCF 更容易使用,但严格来说,它本身并不支持 REST,所以你需要分层一些东西在上面。例如,请参阅http://engineering.laterooms.com/building-microservices-with-nancy-fx/

    而且,如果您决定使用 Nancy,就在不需要管理员权限的情况下侦听本地计算机上的端口而言,您需要在配置中指定 HostConfiguration.RewriteLocalhost(或者,至少,您上次是这样做的)我用过 NancyFX)。

    【讨论】:

    • 我用示例代码更新了我的帖子。我正在绑定 localhost:5000/test。感谢您提供有关 NancyFX 的提示。我去看看!
    • 啊,你可能认为你正在绑定本地主机。仔细检查 WCF 是否没有将其解释为“所有本地地址”。南希(或我上次使用它时)。
    • 所以,我尝试了 Nancy,效果很好!让它与我现有的温莎城堡容器很好地配合有点棘手,但我解决了它。再次感谢您的回答!对于所有其他人,我相信这里还有更多可行的答案。但我决定将此标记为答案。
    【解决方案3】:

    好吧,您不需要管理权限来启动它。仅当您无权使用该 URL 时才需要它们。

    ACLURL(工具)可在安装程序中用于向用户或程序授予权限。那么在运行时将不需要管理权限。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-24
      • 2013-07-16
      • 1970-01-01
      • 2013-04-10
      • 2018-11-03
      • 1970-01-01
      • 2011-06-07
      • 1970-01-01
      相关资源
      最近更新 更多