配置WCF以仅侦听LOCALHOST

时间:2010-03-02 02:29:15

标签: wcf localhost

类似于Visual Studio开发Web服务器(Cassini)限制它只在localhost上服务,我有一个只在localhost上需要的WCF服务实现。

除了Windows防火墙提示允许程序侦听面向外部的NIC之外,我不介意其他机器具有访问权限。由于这只是内部需要,我宁愿限制WCF服务器端配置,以免它破坏防火墙探测器。

binding.HostNameComparisonMode = HostNameComparisonMode.Exact是正确的解决方案吗?我不明白这是否足够。

====

与Cassini一样,此服务实施是其他需要网络通信的替代方案。客户端可以配置为连接到真实服务器或在localhost上运行的虚假实现。

2 个答案:

答案 0 :(得分:7)

我认为你正以错误的方式接近它。您应该使用命名管道绑定,它应该支持您正在使用的任何消息交换模式(它支持请求 - 响应,以及WS支持的相同并发和会话状态模式)。

来自MSDN标题为"Choosing a Transport"(强调我的)的部分:

  

何时使用命名管道传输

     

命名管道是一个对象   Windows操作系统内核等   作为共享内存的一部分   流程可用于通信。一个   命名管道有一个名称,可以使用   用于单向或双向通信   在一台机器上的进程之间。

     

当不同的WCF应用程序之间需要通信时   一台电脑,你想要的   阻止与他人的任何沟通   机器,然后使用命名管道   运输。一个额外的限制   是从Windows运行的进程   远程桌面可能被限制为   相同的Windows远程桌面   会话,除非他们有提升   特权。

这满足您的确切要求,只不过是配置更改。

答案 1 :(得分:0)

这取决于你如何托管它。如果您使用的是IIS7或WAS,则WCF使用IIS的匹配模式。否则,如果您使用HostNameComparisonMode.Exact,则是,主机名始终是匹配的关键因素。如果主机名不匹配,则调度通常会失败。

应该注意的是,精确度不是100%完全准确......它仍然允许主机名中的一些变化。如果您同时拥有NetBios主机名和完整DNS名称,则仍会进行匹配,因为WCF将这两者视为同一个。

System.ServiceModel.BasicHttpBinding.HostNameComparisonmode