我记得使用命名管道在两台机器之间进行通信(回到 Windows NT 中)。为什么现在我读到命名管道仅用于同一台机器中的进程间通信?(在 Vista 和 Windows 7 中)
2 回答
作为操作系统基础结构的命名管道完全可用于机器间通信 - 请参阅命名管道上的 MSDN 文档。
命名管道可用于在同一台计算机上的进程之间或 跨网络的不同计算机上的进程之间提供通信。 如果服务器服务正在运行,则所有 命名管道都可以远程访问。 如果您打算仅在本地使用命名管道,请拒绝访问 NT AUTHORITY\NETWORK 或切换到本地 RPC。
但是,我假设您可能在谈论 WCF 绑定“NetNamedPipe”,它确实是仅在同一台机器上的通信。为什么会这样,您必须询问 WCF 设计团队——我没有任何相关信息。
但正如 Stephen C 正确所说的那样 - 如果您需要机器对机器通信(在 WCF 中),请改用 netTcpBinding - 两者在功能、速度和特性集方面非常相似。
请参阅这篇文章,了解在 .NET 3.5 中添加的对命名管道的支持。
马克
因为如果它们是非本地的,它们将被称为套接字。
编辑:实际上,这是一个相当轻率的、以 UNIX 为中心的答案。在 UNIX 上,命名管道仅用于本地通信。相比之下,套接字既可以用于本地通信,也可以用于非本地通信,并且可以使用多种传输协议。另一个不同之处在于您找到它们的方式。命名管道通常位于文件系统命名空间中。套接字(或更准确地说,套接字端点)由某种网络地址标识,该地址通常在某种名称服务器/服务中查找。