C# 如何使我的自托管WCF服务不尝试保留本地主机以外的URL?

C# 如何使我的自托管WCF服务不尝试保留本地主机以外的URL?,c#,wcf,C#,Wcf,我想在.NET3.5桌面应用程序中嵌入RESTAPI。在该框架版本中,只有一个选项:自托管WCF 但我似乎不能让它只在本地主机上监听 启动时,应用程序尝试为http://+:8000进行url保留,但由于System.ServiceModel.AddressAccessDeniedException未使用管理员权限运行,因此失败 我希望它只保留http://localhost:8000,因此无需管理员权限 使用HostNameComparisonMode.Exact似乎不会改变任何事情 以下是我

我想在.NET3.5桌面应用程序中嵌入RESTAPI。在该框架版本中,只有一个选项:自托管WCF

但我似乎不能让它只在本地主机上监听

启动时,应用程序尝试为
http://+:8000
进行url保留,但由于
System.ServiceModel.AddressAccessDeniedException
未使用管理员权限运行,因此失败

我希望它只保留
http://localhost:8000
,因此无需管理员权限

使用
HostNameComparisonMode.Exact
似乎不会改变任何事情

以下是我尝试过的:

使用Myservice;
使用制度;
使用System.ServiceModel;
使用System.ServiceModel.Description;
使用System.ServiceModel.Web;
名称空间控制台主机1
{
班级计划
{
静态void Main(字符串[]参数)
{
//使用精确的主机名比较模式
WebHttpBinding=新的WebHttpBinding();
binding.HostNameComparisonMode=HostNameComparisonMode.Exact;
WebServiceHost主机=新的WebServiceHost(类型为(服务1),新的Uri(“http://localhost:8000/"));
ServiceEndpoint=host.AddServiceEndpoint(typeof(IService1),绑定“某个端点”);
//主机仍然试图获得http://+:8000的预订,而不仅仅是http://localhost:8000
host.Open();
}
}
}

我能做什么?

以下命令能解决问题吗

  • 对于Windows Vista,Windows 7
netsh http add urlacl url=user=DOMAIN\user

  • 对于Windows XP,Server2003
httpcfg集urlacl/u{}/a ACL




如果问题仍然存在,请随时通知我。

如果使用
http://127.0.0.1:8000/
?很遗憾,是的。很遗憾,这不是一个选项,因为调用netsh需要管理员权限。Http地址由名为Http.sys的核心驱动程序管理。当您希望http.sys发出请求时,需要注册http命名空间,这是一个需要特权(管理员特权)的操作。True。但是注册localhost(而不是“+”)不需要管理员权限。我只需要本地主机。我希望WCF能够理解这一点,而不是试图保留“+”。与OWIN对.NET 4+的处理类似,当我使用以下命令netsh http add urlacl url=user=Test时,它仍然提示我请求的操作需要权限提升,因此我无法理解注册localhost(与“+”)不需要管理员权限。此外,我认为与WCF没有关系,基于http协议的通信由http.sys管理。您是否介意分享OWIN处理的类似问题?希望以下链接对您有用。