【问题标题】:Why are named pipes local?为什么命名管道是本地的?
【发布时间】:2009-11-06 05:17:48
【问题描述】:

我记得使用命名管道在两台机器之间进行通信(早在 Windows NT 中)。 为什么现在我读到命名管道仅用于同一台机器中的进程间通信? (在 Vista 和 Windows 7 中)

【问题讨论】:

    标签: windows-7 windows-vista named-pipes


    【解决方案1】:

    作为操作系统基础架构的命名管道完全可用于机器间通信 - 请参阅MSDN docs on Named Pipes

    命名管道可用于提供 进程之间的通信 同一台计算机或进程之间 网络中的不同计算机。 如果服务器服务正在运行,全部 命名管道可以远程访问。 如果您打算使用命名管道 仅限本地,拒绝访问 NT AUTHORITY\NETWORK 或切换到本地 RPC。

    但是,我假设您可能在谈论 WCF 绑定“NetNamedPipe”,它确实是仅在同一台机器上的通信。为什么会这样,您必须询问 WCF 设计团队 - 我没有任何相关信息。

    但正如 Stephen C 所说的那样 - 如果您需要机器对机器的通信(在 WCF 中),请改用 netTcpBinding - 两者在功能、速度和特性集方面非常相似。

    有关命名管道,请参阅此 article on the support added in .NET 3.5

    马克

    【讨论】:

    • 另外...我认为配置 SQL 以接受管道只能在本地工作
    • @Nestor:不,我相信 SQL Server 的命名管道实际上是跨机器的; “映射内存”方法仅适用于本地。
    【解决方案2】:

    因为如果它们是非本地的,它们将被称为套接字。

    编辑:实际上,这是一个相当轻率的、以 UNIX 为中心的答案。在 UNIX 上,命名管道仅用于本地通信。相比之下,套接字既可用于本地通信,也可用于非本地通信,并且可以使用多种传输协议。另一个不同之处在于您找到它们的方式。命名管道通常位于文件系统命名空间中。套接字(或更准确地说,套接字端点)由某种网络地址标识,该地址通常在某种名称服务器/服务中查找。

    【讨论】:

    • 不确定我是否同意(或理解你)。管道在套接字之上增加了很多握手。它们不一样。
    • @Nestor - 我同意。但我认为我的观点仍然有效。对于非本地通信,最好使用 Socket。尤其是如果您可能希望远程计算机不是 Windows 的……将来某个时候。
    • “那些不了解 UNIX 的人注定要重新发明它,很糟糕。” ——亨利·斯宾塞
    • @Stephen:是的,绝对 - 我想这就是为什么 WCF 只为同一机器通信实现命名管道,并在机器之间使用 NetTcp(即套接字) - 他们遵循了你的建议 :-)
    猜你喜欢
    • 2010-09-15
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 2011-08-12
    • 2010-10-16
    • 2021-09-13
    • 1970-01-01
    相关资源
    最近更新 更多