选择交通方式

本主题讨论在 Windows Communication Foundation(WCF):HTTP、TCP 和命名管道中包含的三个主要传输之间进行选择的条件。 WCF 还包括消息队列(也称为 MSMQ)传输,但本文档不涵盖消息队列。

WCF 编程模型将终结点操作(以服务协定表示)和连接两个终结点的传输机制分开。 这使你可以灵活地决定如何将服务公开给网络。

在 WCF 中,可以通过使用“绑定”(由一系列的绑定元素组成)来确定如何在终结点之间通过网络传输数据。 传输由传输绑定元素表示,该元素是绑定的一部分。 绑定包括可选的协议绑定元素,例如安全性、所需的消息编码器绑定元素和所需的传输绑定元素。 传输工具发送消息的序列化形式到其他应用程序或从其他应用程序接收消息的序列化形式。

如果必须连接到现有客户端或服务器,则可能无法选择使用特定传输。 但是,可以通过多个终结点(每个终结点使用不同的传输)访问 WCF 服务。 如果单个传输未涵盖服务的预期受众,请考虑通过多个终结点公开该服务。 然后,客户端应用程序可以使用最适合它们的终结点。

在选择传输方式后,必须选择使用该传输方式的绑定。 可以选择系统提供的绑定(请参阅 System-Provided 绑定),也可以生成自己的自定义绑定(请参阅 自定义绑定)。 还可以创建自己的绑定。 有关详细信息,请参阅 创建 User-Defined 绑定

各种交通方式的优点

本部分介绍选择三种主要运输方式中的任何一种的主要原因,并包括详细的决策图表以帮助做出选择。

何时使用 HTTP 传输

HTTP 是客户端和服务器之间的请求/响应协议。 最常见的应用程序由与 Web 服务器通信的 Web 浏览器客户端组成。 客户端将请求发送到服务器,该服务器侦听客户端请求消息。 当服务器收到请求时,它将返回一个响应,其中包含请求的状态。 如果成功,则返回可选数据,例如网页、错误消息或其他信息。 有关 HTTP 协议的详细信息,请参阅 HTTP - 超文本传输协议

HTTP 协议不是基于连接的 - 发送响应后,不会维护任何状态。 若要处理多页事务,应用程序必须保留任何必要的状态。

在 WCF 中,HTTP 传输绑定针对与旧版非 WCF 系统的互作性进行优化。 如果所有通信方都使用 WCF,则基于 TCP 或基于命名管道的绑定速度更快。 有关详细信息,请参阅 NetTcpBindingNetNamedPipeBinding

何时使用 TCP 传输

TCP 是基于连接的、面向流的传送服务,具有端到端错误检测和更正。 基于连接 意味着在交换数据之前建立主机之间的通信会话。 主机是逻辑 IP 地址标识的 TCP/IP 网络上的任何设备。

TCP 提供可靠的数据传输和易用性。 具体而言,TCP 会通知数据包传递的发送方,保证数据包的传递顺序与发送数据包的顺序相同,重新传输丢失的数据包,并确保数据包不会重复。 请注意,此可靠传递适用于两个 TCP/IP 节点,与 WS-ReliableMessaging 不同的是,后者适用于终结点之间,无论它们可能包含多少个中间节点。

WCF TCP 传输针对通信双方都使用 WCF 的情况进行了优化。 对于涉及在不同计算机之间通信的方案,此绑定是最快的 WCF 绑定。 消息交换通过 BinaryMessageEncodingBindingElement 实现优化的消息传输。 TCP 提供双工通信,因此可以用于实现双工协定,即使客户端位于网络地址转换 (NAT) 的后端也没有关系。

适合使用命名管道传输的情况

命名管道是 Windows 操作系统内核中的对象,例如供进程用于通信的共享内存段。 命名管道是一种具有名称的通信方式,可用于单台计算机上进程之间的单向或双向通信。

当单个计算机上的不同 WCF 应用程序之间需要通信,并且你想要防止来自另一台计算机的任何通信时,请使用命名管道传输。 另一个限制是,从 Windows 远程桌面运行的进程可能会限制为同一 Windows 远程桌面会话,除非它们具有提升的权限。

警告

在 IIS 中托管的多个站点上使用具有弱通配符 URL 预留的命名管道传输时,可能会出现以下错误:尝试侦听站点“2”时,协议“net.pipe”的激活服务“NetPipeActivator”中发生了错误,因此暂时为站点禁用了协议。 有关更多详细信息,请参阅异常消息。 URL: WeakWildcard:net.pipe:/<计算机名>/ 状态: ConflictingRegistration 异常: 进程名称: SMSvcHost 进程 ID: 1076\

选择交通方式的决策点

下表描述了用于选择传输的常见决策点。 应考虑适用于应用程序的任何其他属性和传输。 确定对应用程序重要的属性,识别与每个属性良好匹配的传输方式,然后选择与属性集最契合的传输方式。

特征 DESCRIPTION 适合的传输方式
诊断 诊断允许自动检测传输连接问题。 所有传输都支持发送回描述连接的故障信息的功能。 但是,WCF 不包括用于调查网络问题的诊断工具。 没有
托管 所有 WCF 终结点都必须托管在应用程序中。 IIS 6.0 和早期版本仅支持托管使用 HTTP 传输的应用程序。 在 Windows Vista 上,添加了用于托管所有 WCF 传输(包括 TCP 和命名管道)的支持。 有关详细信息,请参阅 “在 Internet 信息服务中托管 ”和 “在 Windows 进程激活服务中托管”。 HTTP
检查 检视是在传输过程中从消息中提取和处理信息的能力。 HTTP 协议将路由和控制信息与数据分开,从而更轻松地构建检查和分析消息的工具。 易于检查的传输还可能需要更少的网络设备处理能力。 使用的安全级别会影响是否可以检查消息。 HTTP
延迟 延迟是完成消息交换所需的最短时间。 所有网络作都有或多或少的延迟,具体取决于选择的传输。 由于消息的强制相关性,利用固有消息交换模式为请求-答复的传输方式(如 HTTP)进行双工或单向通信会导致滞后时间增加。 这种情况下,请考虑使用固有消息交换模式为双工的传输方式,如 TCP。 TCP、命名

达到 传输的覆盖范围反映了传输与其他系统连接的能力。 命名管道传送的范围很小,它只能连接同一台计算机上运行的服务。 TCP 和 HTTP 传输具有出色的覆盖范围,可以渗透到一些 NAT 和防火墙配置。 有关详细信息,请参阅 使用 NAT 和防火墙 HTTP、TCP
安全 安全性是通过提供机密性、完整性或身份验证来保护传输过程中的消息的能力。 机密性可保护邮件不被检查,完整性保护消息不被修改,身份验证可保证消息的发送方或接收方。

WCF 支持消息级别和传输级别的传输安全性。 如果传输支持缓冲传输模式,则消息安全性与传输组合在一起。 对传输安全性的支持因所选传输而异。 HTTP、TCP 和命名管道传输在对传输安全性的支持方面具有相当的平衡。
全部
吞吐量 吞吐量测量可在指定时间段内传输和处理的数据量。 与延迟一样,所选传输可能会影响服务作的吞吐量。 最大化传输的吞吐量需要最大程度地减少传输内容的开销,并最大限度地减少等待消息交换完成所花费的时间。 TCP 和命名管道传输使消息正文增加的开销都不大,并支持减少消息答复等待时间的固有双工形状。 TCP、命名管道
工具 工具表示对用于开发、诊断、承载和其他活动的协议的第三方应用程序支持。 开发用于 HTTP 协议的工具和软件意味着投资特别大。 HTTP

另请参阅