【发布时间】:2010-03-10 14:22:58
【问题描述】:
我正在寻找一种方法来使用 WCF WebServiceHost 而不必依赖 HttpListener 类及其相关的权限问题(有关详细信息,请参阅this question)。
我正在开发一个应用程序,该应用程序通过其 REST API 与另一个(第三方)应用程序进行本地通信。
目前我们使用 WCF 作为嵌入式 HTTP 服务器。我们创建一个 WebServiceHost 如下:
String hostPath = "http://localhost:" + portNo;
WebServiceHost host = new WebServiceHost(typeof(IntegrationService), new Uri(hostPath));
// create a webhttpbinding for rest/pox and enable cookie support for session management
WebHttpBinding webHttpBinding = new WebHttpBinding();
webHttpBinding.AllowCookies = true;
ServiceEndpoint ep = host.AddServiceEndpoint(typeof(IIntegrationService), webHttpBinding, "");
host.Open()
ChannelFactory<IIntegrationService> cf = new ChannelFactory<IIntegrationService>(webHttpBinding, hostPath);
IIntegrationService channel = cf.CreateChannel();
只要我们的应用程序以管理员身份运行,一切都会运行良好。如果我们在没有管理权限的机器上运行我们的应用程序,host.Open() 将抛出一个 ErrorCode == 5 (ERROR_ACCESS_DENIED) 的 HttpListenerException。
我们可以通过从命令行运行 httpcfg.exe 来解决这个问题,但这是一个一键式桌面应用程序,这对我们来说并不是真正的长期解决方案。
我们可以放弃 WCF 并编写自己的 HTTP 服务器,但如果可能的话,我想避免这种情况。
在仍然使用 WCF 提供的所有剩余 HTTP 脚手架的同时,用标准 TCP 套接字替换 HttpListener 的最简单方法是什么?
【问题讨论】:
-
ErrorCode == 5 (ERROR_ACCESS_DENIED): "netsh http urlacl" 是您授予自己访问 HTTP 侦听器保留地址的方式。
标签: c# wcf httplistener