【问题标题】:Is NetNamedPipeBinding binding guaranteed to work only on the same machine?NetNamedPipeBinding 绑定是否保证只能在同一台机器上工作?
【发布时间】:2010-03-16 14:09:06
【问题描述】:

我创建了一个使用 WCF 与其通信的 Windows 服务。该服务应仅从同一台机器调用。如果我可以保证没有方式可以从另一台机器与它通信,我可以认为它是安全的

由于我在单台机器上使用通信,我选择使用NetNamedPipeBinding。这个绑定文档说它已针对机器上的通信进行了优化,但不提供任何保证。

我的问题是,NetNamedPipeBinding 是否提供仅机器上的保证?如果不提供什么绑定,或者您将如何实现提供此类保证的自定义绑定?

谢谢,
阿萨夫

【问题讨论】:

    标签: wcf .net-4.0 wcf-binding named-pipes


    【解决方案1】:

    Microsoft 在 MSDN 上的 Choosing a Transport 上发布了以下内容:

    何时使用命名管道传输

    命名管道是 Windows 操作系统内核中的一个对象,例如进程可用于通信的共享内存部分。命名管道具有名称,可用于单机进程之间的单向或双工通信。

    如果需要在单台计算机上的不同 WCF 应用程序之间进行通信,并且您希望阻止来自另一台计算机的任何通信,则使用命名管道传输。另一个限制是,从 Windows 远程桌面运行的进程可能会被限制在同一个 Windows 远程桌面会话中,除非它们具有提升的权限。

    这几乎提供了所需的保证。

    【讨论】:

    • 这很有趣,因为命名管道绝对能够在计算机之间进行通信。这是否意味着 MS 专门为 WCF 阻止了命名管道的这一功能?
    【解决方案2】:

    我正在阅读 Essential WCF - 第 4 章(绑定)中的文本,发现以下内容,我复制这些内容只是为了帮助某人;

    WCF 将 netNamedPipeBidning 绑定限制为本地机器通信

    虽然可以使用命名管道通过网络进行通信,但 WCF 将使用限制为本地计算机通信。这意味着它可用于确保您的服务在网络上不可用。这是通过两种机制实现的:

    a) 网络安全标识符 (SID: S-1-5-2) 被拒绝访问命名管道。 b) 命名管道的名称是随机生成并存储在共享内存中的,因此只有在同一台机器上运行的客户端才能访问它。

    【讨论】:

      【解决方案3】:

      NetNamedPipeBinding 只适用于本地机器。请参阅here 帖子中的图表,了解确定使用哪种类型的绑定的好方法。

      这里有一个external link,它提供了一个比只用我的词换它更明确的答案。

      【讨论】:

      • @Matt:谢谢,但我从 Microsoft 自己那里找到了更明确的信息,并将其发布为我自己的答案。感谢您的宝贵时间。
      猜你喜欢
      • 1970-01-01
      • 2015-07-23
      • 2017-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多