如何让我的自托管 WCF 服务不尝试保留 localhost 以外的 url?
Posted
技术标签:
【中文标题】如何让我的自托管 WCF 服务不尝试保留 localhost 以外的 url?【英文标题】:How can I make my self-hosted WCF service NOT try to reserve urls other than localhost? 【发布时间】:2019-04-07 22:35:33 【问题描述】:我想在 .NET 3.5 桌面应用程序中嵌入一个 REST API。在该框架版本上,只有一个选项:自托管 WCF。
但我似乎无法让它只在 localhost 上监听。
启动时,该应用尝试为http://+:8000
预留网址,但由于我没有以管理员权限运行它,因此失败并显示System.ServiceModel.AddressAccessDeniedException
。
我希望它只保留http://localhost:8000
,从而避免需要管理员权限。
使用HostNameComparisonMode.Exact
似乎没有任何改变。
这是我尝试过的:
using Myservice;
using System;
using System.ServiceModel;
using System.ServiceModel.Description;
using System.ServiceModel.Web;
namespace consolehost1
class Program
static void Main(string[] args)
//Use exact hostname comparison mode
WebHttpBinding binding = new WebHttpBinding();
binding.HostNameComparisonMode = HostNameComparisonMode.Exact;
WebServiceHost host = new WebServiceHost(typeof(Service1), new Uri("http://localhost:8000/"));
ServiceEndpoint endpoint = host.AddServiceEndpoint(typeof(IService1), binding, "some-endpoint");
//The host still tries to get a reservation for http://+:8000 and not just http://localhost:8000
host.Open();
我能做什么?
【问题讨论】:
如果你使用http://127.0.0.1:8000/
也会发生同样的情况吗?
不幸的是。
【参考方案1】:
下面的命令能解决问题吗?
适用于 Windows Vista、Windows7适用于 Windows XP、Server2003。netsh http 添加 urlacl url=http://+:8000/MyUriuser=DOMAIN\user
httpcfg 设置 urlacl /u http://URL:Port/ | https://URL:Port/ /a ACL
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/configuring-http-and-httpshttps://docs.microsoft.com/en-us/windows/desktop/http/add-urlacl 如果问题仍然存在,请随时告诉我。
【讨论】:
很遗憾,这不是一个选项,因为调用 netsh 需要管理员权限。 Http 地址由名为 http.sys 的核心驱动程序管理。当你想让http.sys发出请求时,需要注册http命名空间,这是一个需要权限(管理员权限)的操作。 是的。但是注册 localhost(而不是“+”)不需要管理员权限。我只需要本地主机。我希望 WCF 能够理解这一点,而不是尝试保留“+”。就像 OWIN 对 .NET 4+ 所做的那样 当我使用以下命令时,它仍然提示我请求的操作需要权限提升,netsh http add urlacl url=localhost:1900 user=Test 所以我无法理解注册本地主机(而不是"+") 不需要管理员权限。另外,我觉得和WCF没有关系,基于http协议的通信是由http.sys管理的。您介意分享一下 OWIN 处理的类似问题吗? 希望以下链接对您有用。 serverfault.com/questions/822207/…以上是关于如何让我的自托管 WCF 服务不尝试保留 localhost 以外的 url?的主要内容,如果未能解决你的问题,请参考以下文章
想要将 WCF Web 服务作为 Windows 服务托管,而不是在 IIS 中托管
WCF - 在 nettcpbinding (c#) 中禁用安全性