首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以更改WebServiceHost以避免使用HttpListener?

是否可以更改WebServiceHost以避免使用HttpListener?
EN

Stack Overflow用户
提问于 2010-03-10 22:22:58
回答 3查看 2.2K关注 0票数 1

我正在寻找一种使用WCF WebServiceHost的方法,而不必依赖于HttpListener类及其相关的权限问题(详细信息请参阅this question )。

我正在开发一个应用程序,它通过REST API与另一个(第三方)应用程序进行本地通信。

目前,我们使用WCF作为嵌入式HTTP服务器。我们按如下方式创建一个WebServiceHost:

代码语言:javascript
复制
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服务器,但如果可能的话,我想避免这种情况。

用标准的TCP套接字替换HttpListener,同时仍然使用WCF提供的所有剩余的HttpListener,最简单的方法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-12 15:55:20

您可以很容易地通过CustomBinding编写自己的堆栈,使用更高级的协议“原样”,并滚动您自己的不受HttpListener或IIS支持的HttpTransport版本。当然,这是可行的,但这是大量的工作。把现有的HttpTransport比特和反射器分开--里面有很多可移动的部分。如果你不需要任何花哨的东西,比如HTTPS或chunking,你可能会在一两天内破解出一个简单的PoC over Socket,但让它变得健壮将是一件棘手的事情。Here是一堆资源的很好的总结(现在可能有点过时了)。

票数 1
EN

Stack Overflow用户

发布于 2010-03-10 22:27:41

您的问题与HttpListener无关。

您的问题是:*您有一个权限有限的oneClick应用程序*试图打开服务器端口。

这是一个矛盾的问题。不受信任的有限权限应用程序不应打开服务器端口。这就是为什么每个定义都不允许这样做。

你有没有试过打开一个普通的插座端口?它也不应该工作。

通常,有限信任最终用户应用程序不应承载web服务;)

也就是说,我曾经在类似的情况下尝试在驱动程序通信场景中使用WCF -谢天谢地,我的应用程序是在完全许可的情况下运行的。

票数 2
EN

Stack Overflow用户

发布于 2010-03-13 06:16:11

你也可以考虑拆分足够多的Cassini,使其可以托管在你的应用程序中,并在其中加载WCF管道(通过.svc文件和服务激活处理程序)-这种方式只需要编写很少的新代码,但仍然可以为你提供一个相当健壮和经过测试的way服务器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2417554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档