没有管理权限的localhost上的自托管REST API

时间:2016-02-12 11:05:52

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

我想在我的WPF应用程序中实现一个简单的自托管REST API,它侦听localhost上的特定端口。如果网站正在运行,该网站将使用此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();
    });

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

3 个答案:

答案 0 :(得分:3)

在安装过程中运行:

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

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

答案 1 :(得分:1)

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

自从我上次使用WCF以来,这是一段很长的时间,所以我不记得那样做的相关咒语。

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

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

答案 2 :(得分:0)

嗯,您不需要管理员权限即可启动它。如果您无权使用该URL,则只需要它们。

ACLURL(工具)可以在安装程序中用于授予用户或程序的权限。然后在运行时不需要管理权限。