2

我正在构建一个分布式系统。有几个应用程序(一些是基于 .Net 的(C#),另一些是基于 C++ 的(不是 C++/CLI!))。这些应用程序将安装在集群中的每台计算机上(当前由 Windows 驱动)。在本地 PC 上我用于 IPC:用于 C# 应用程序的 MemoryMappedFiles、用于 C++ 应用程序的共享内存、用于 C# 和 C++ 之间的 IPC 的命名管道。通过 Internet,我使用 WCF TCP 绑定,使用 C# 应用程序作为 C++ 应用程序的桥梁。

什么会更好地用于 LAN 通信?MPICH2,似乎使用 TCP... 典型的命名管道是否比 WCF TCP 绑定更快(禁用安全性等)?消息将非常大,主要是双重类型。WCF 在我的情况下非常方便(所有数学方法都只是合同),但它的性能是一个问题。

4

2 回答 2

0

阅读此内容,http://weblogs.asp.net/spano/archive/2007/10/02/choosing-the-right-wcf-binding.aspx

您可以看到选择取决于服务所在的位置。希望能帮助到你。

于 2012-10-24T14:16:33.077 回答
0

您正在混合两个不同的层,您也可以在 NamedPipes 上运行 WCF。命名管道(虽然可以使用很多设置字)并非旨在在两台计算机上的两个进程之间进行通信。

请参阅有关选择传输的 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 操作系统内核中的一个对象,例如进程可用于通信的共享内存部分。命名管道有一个名称,可用于单机进程之间的单向或双工通信。

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

于 2012-10-24T14:24:23.680 回答