类似于Visual Studio开发Web服务器(Cassini)限制它只在localhost上服务,我有一个只在localhost上需要的WCF服务实现。
除了Windows防火墙提示允许程序侦听面向外部的NIC之外,我不介意其他机器具有访问权限。由于这只是内部需要,我宁愿限制WCF服务器端配置,以免它破坏防火墙探测器。
binding.HostNameComparisonMode = HostNameComparisonMode.Exact
是正确的解决方案吗?我不明白这是否足够。
====
与Cassini一样,此服务实施是其他需要网络通信的替代方案。客户端可以配置为连接到真实服务器或在localhost上运行的虚假实现。
答案 0 :(得分:7)
我认为你正以错误的方式接近它。您应该使用命名管道绑定,它应该支持您正在使用的任何消息交换模式(它支持请求 - 响应,以及WS支持的相同并发和会话状态模式)。
来自MSDN标题为"Choosing a Transport"(强调我的)的部分:
何时使用命名管道传输
命名管道是一个对象 Windows操作系统内核等 作为共享内存的一部分 流程可用于通信。一个 命名管道有一个名称,可以使用 用于单向或双向通信 在一台机器上的进程之间。
当不同的WCF应用程序之间需要通信时 一台电脑,你想要的 阻止与他人的任何沟通 机器,然后使用命名管道 运输。一个额外的限制 是从Windows运行的进程 远程桌面可能被限制为 相同的Windows远程桌面 会话,除非他们有提升 特权。
这满足您的确切要求,只不过是配置更改。
答案 1 :(得分:0)
这取决于你如何托管它。如果您使用的是IIS7或WAS,则WCF使用IIS的匹配模式。否则,如果您使用HostNameComparisonMode.Exact
,则是,主机名始终是匹配的关键因素。如果主机名不匹配,则调度通常会失败。
应该注意的是,精确度不是100%完全准确......它仍然允许主机名中的一些变化。如果您同时拥有NetBios主机名和完整DNS名称,则仍会进行匹配,因为WCF将这两者视为同一个。