【问题标题】:Configure WCF for LOCALHOST-only listening为仅 LOCALHOST 侦听配置 WCF
【发布时间】:2010-03-02 02:29:15
【问题描述】:

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

我不介意其他机器可以访问,除了 Windows 防火墙提示允许程序在面向外部的 NIC 上侦听。由于这仅在内部需要,我宁愿限制 WCF 服务器端配置,以免触发防火墙检测器。

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

====

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

【问题讨论】:

    标签: wcf localhost


    【解决方案1】:

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

    来自 MSDN 中标题为 "Choosing a Transport" 的部分(重点是我的):

    何时使用命名管道传输

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

    当需要在不同 WCF 应用程序之间进行通信时 一台计算机,而您想要 阻止来自他人的任何交流 机器,然后使用命名管道 运输。附加限制 是从 Windows 运行的进程吗 远程桌面可能仅限于 同一个 Windows 远程桌面 会话,除非他们已经提升 特权。

    这可以满足您的确切要求,并且应该只是配置更改。

    【讨论】:

    • 同意; “仅限本地主机”实际上是“进程间通信”,命名管道是最好的选择。
    • 对不起 - 我要澄清一下:像 Cassini 一样,这个 Service 实现是其他需要网络通信的东西的替代品。客户端可以配置为连接到真实服务器或在 localhost 上运行的假实现。
    • @Jason:如果可以配置客户端,为什么不将其配置为使用命名管道端点而不是 Http 端点?由于 WCF 能够同时具备这两种功能,并且通过管道调用服务与通过 http 调用服务对于 WCF 来说是相同的......为什么还要打扰其他任何事情呢?
    • 您好 jrista,在这个特定的应用程序中,端点不能以这种方式配置。
    • 为什么不能这样配置?
    【解决方案2】:

    这取决于您如何托管它。如果你是在 IIS7 或 WAS 中,那么 WCF 使用 IIS 的匹配模式。否则,如果您使用HostNameComparisonMode.Exact,那么是的,主机名将始终是匹配的关键因素。如果主机名不匹配,一般dispatch会失败。

    需要注意的是,exact 并不是 100% 完全准确...它仍然允许主机名有一些变化。如果您同时拥有 NetBios 主机名和完整的 DNS 名称,匹配仍然会发生,因为 WCF 将这两者视为一个且相同。

    System.ServiceModel.BasicHttpBinding.HostNameComparisonmode

    【讨论】:

    • 我再次尝试了 binding.HostNameComparisonMode = HostNameComparisonMode.Exact,但它不起作用。清除相关Windows防火墙规则后,防火墙再次提示允许。
    • 我还在 ServiceHost 构造函数中添加了一个new Uri("net.tcp://localhost") 作为基地址
    • 嗯,好像不管是不是环回主机,防火墙都会提示你。除了使用命名管道之外,我不确定您是否可以做任何事情。
    猜你喜欢
    • 2018-01-12
    • 2021-01-25
    • 1970-01-01
    • 2017-05-24
    • 1970-01-01
    • 2015-06-30
    • 2016-06-14
    • 2011-06-09
    • 2017-02-18
    相关资源
    最近更新 更多