我正在构建一个分布式系统。有几个应用程序(一些是.Net(C#),另一些是基于C ++(NOT C ++ / CLI!))。 这些应用程序将安装在群集中的每台计算机上(目前由Windows驱动)。 在本地PC上,我用于IPC:用于C#应用程序的MemoryMappedFiles,用于C ++应用程序的共享内存,用于C#和C ++之间的IPC的命名管道。 在互联网上我使用WCF TCP绑定,使用C#apps作为C ++应用程序的桥梁。
用于LAN通信的最佳方法是什么?似乎MPICH2使用TCP ... 典型的命名管道是否比使用优化的WCF TCP绑定更快(禁用安全性等)?消息将非常大,大多数是双重类型。 WCF在我的情况下非常方便(所有的数学方法都只是契约),但它的性能是一个问题。
答案 0 :(得分:0)
阅读本文http://weblogs.asp.net/spano/archive/2007/10/02/choosing-the-right-wcf-binding.aspx。
您可以看到选择取决于服务所在的位置。希望它有所帮助。
答案 1 :(得分:0)
您正在混合两个不同的图层,您也可以运行WCF over NamedPipes。命名管道(虽然可以使用大量设置字)但不能在两台计算机上的两个进程之间进行通信。
请参阅Choosing a Transport上的此MSDN页面,以帮助您了解何时使用哪种传输方式。
每次运输的优势
本节介绍选择任何一个的主要原因 三个主要运输,包括详细的决策图表 选择他们之间。
何时使用HTTP传输
HTTP是客户端和服务器之间的请求/响应协议。该 最常见的应用程序包括Web浏览器客户端 与Web服务器通信。客户端向服务器发送请求, 它侦听客户端请求消息。当服务器收到一个 请求,它返回一个响应,其中包含的状态 请求。如果成功,可选数据,如网页,则出错 消息或其他信息被返回。有关的更多信息 HTTP协议,请参阅HTTP - 超文本传输协议。
HTTP协议不是基于连接的 - 一旦发送响应, 没有维持国家。要处理多页交易, 申请必须坚持任何必要的状态。
在WCF中,HTTP传输绑定针对互操作性进行了优化 使用传统的非WCF系统。如果所有通信方都在使用 WCF,基于TCP或命名的基于管道的绑定更快。更多 信息,请参阅NetTcpBinding和NetNamedPipeBinding。
何时使用TCP传输
TCP是一种基于连接的,面向流的传送服务 端到端的错误检测和纠正。基于连接意味着 在交换之前建立主机之间的通信会话 数据。主机是由逻辑标识的TCP / IP网络上的任何设备 IP地址。
TCP提供可靠的数据传输和易用性。具体来说,TCP 通知发送方的数据包传送,保证数据包 按发送顺序递送,转发丢失 数据包,并确保数据包不重复。注意 这种可靠的传输适用于两个TCP / IP节点,而不是 与WS-ReliableMessaging相同,它适用于 端点,无论它们包含多少个中间节点。
WCF TCP传输针对两端的场景进行了优化 通信正在使用WCF。这种绑定是最快的WCF 绑定涉及不同之间通信的场景 机器。消息交换使用 BinaryMessageEncodingBindingElement用于优化邮件传输。 TCP提供双工通信,因此可用于实现 双工合同,即使客户端在网络地址后面 翻译(NAT)。
何时使用命名管道传输
命名管道是Windows操作系统内核中的对象,例如 作为进程可以使用的共享内存的一部分 通讯。命名管道具有名称,可用于单向或 单个机器上进程之间的双工通信。
当a上的不同WCF应用程序之间需要通信时 单台计算机,你想阻止任何通信 另一台机器,然后使用命名管道传输。额外的 限制是从Windows远程桌面运行的进程可能 限制为相同的Windows远程桌面会话,除非他们 拥有提升的特权。