队列和可靠会话是实现可靠消息传送的 Windows Communication Foundation (WCF) 功能。 本节中包含的主题讨论 WCF 可靠消息传送功能。
可靠消息传送是可靠消息源(称为源)将消息可靠地传输到可靠消息目标(称为目标)的方式。
可靠消息传送具有以下关键方面:
从源发送到目标的消息的传送保证,而不管消息传送或传输是否失败。
源和目标彼此分离,从而提供源和目标的独立故障和恢复,以及消息的可靠传输和传递,即使源或目标不可用。
可靠的消息传送通常以高延迟为代价。 延迟是消息从源到达目标所需的时间。 因此,WCF 提供以下类型的可靠消息传送:
可靠会话
无论分隔消息(源终结点和目标)的中介的数量或类型如何,可靠会话都使用 WS-ReliableMessaging 协议在源和目标之间提供消息的端到端可靠传输。 这包括不使用 SOAP(例如 HTTP 代理)或使用 SOAP(例如基于 SOAP 的路由器或网桥)的任何传输中介,这些中介要求消息在终结点之间流动。 可靠会话使用内存中传输窗口来屏蔽 SOAP 消息级故障,并在传输失败时重新建立连接。
可靠会话提供低延迟可靠消息传输。 它们通过任何代理或中介提供 SOAP 消息,相当于 TCP 通过 IP 桥为数据包提供的内容。 有关可靠会话的详细信息,请参阅 Reliable Sessions。
队列
WCF 中的队列提供消息的可靠传输以及源和目标之间的分离,代价是高延迟。 WCF 排队的通信是在消息队列(也称为 MSMQ)之上生成的。
MSMQ 作为一个可选功能随 Windows 提供,并以 NT 服务的形式运行。 它代表源捕获传输队列中传输的消息,并将其传送到目标队列。 每当目标请求消息时,目标队列都会代表目标接收消息,以便以后传递消息。 MSMQ 队列管理器实现可靠的消息传输协议,以便在传输中不会丢失消息。 协议可以是本机协议或基于 SOAP 的,例如 Soap Reliable Messaging Protocol (SRMP)。
隔离,加上队列之间的可靠消息传输,使松散耦合的应用程序能够可靠地通信。 与可靠的会话不同,源和目标不必同时运行。 当源的消息生成速率与目标的消息消耗速率不匹配时,这就隐式地使队列成为一种负载调节机制。 有关队列的详细信息,请参阅 WCF 中的队列。