用于网格计算的WCF TCP绑定或命名管道?

时间:2012-10-24 13:51:29

标签: .net wcf named-pipes grid-computing

我正在构建一个分布式系统。有几个应用程序(一些是.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在我的情况下非常方便(所有的数学方法都只是契约),但它的性能是一个问题。

2 个答案:

答案 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远程桌面会话,除非他们   拥有提升的特权。